标签:
1 #include <iostream> 2 #include <string> 3 #include <deque> 4 #include <stdexcept> 5 template <typename T> 6 class my_stack 7 { 8 private: 9 std::deque<T> elems; 10 public: 11 void push(T const &); 12 void pop(); 13 T top()const; 14 bool empty()const{return elems.empty();} 15 //operator = 16 template <typename T2> 17 my_stack<T> & operator=(my_stack<T2> const&); 18 }; 19 20 template <typename T> 21 void my_stack<T>::push(T const &elem) 22 { 23 elems.push_back(elem); 24 } 25 26 template <typename T> 27 void my_stack<T>::pop() 28 { 29 if (this->empty()) 30 { 31 throw std::out_of_range("the list is empty,please insert the elems\n"); 32 } 33 elems.pop_back(); 34 } 35 template <typename T> 36 T my_stack<T>::top()const 37 { 38 if(this->empty()) 39 { 40 throw std::out_of_range("No elements\n"); 41 42 } 43 return elems.back(); 44 } 45 template <typename T> 46 template <typename T2> 47 my_stack<T>& my_stack<T>::operator=(my_stack<T2> const&op2) 48 { 49 if( (void*)this == (void *)&op2) 50 { 51 return *this; 52 } 53 my_stack<T2> tmp(op2); //copy constructor 54 elems.clear(); 55 while(!tmp.empty()) 56 { 57 elems.push_front(tmp.top()); //put in the front !... 58 tmp,pop(); // while loop breakdown 59 } 60 return *this; 61 } 62 63 int main() 64 { 65 my_stack <int> int_stack; 66 my_stack <float> float_stack; 67 68 float_stack = int_stack; 69 70 return 0; 71 }
标签:
原文地址:http://www.cnblogs.com/gearslogy/p/4283203.html