成员模板2

来源:互联网 发布:日历js脚本 编辑:程序博客网 时间:2024/06/01 07:35
#include <iostream>#include <deque>#include <vector>#include <stdexcept>using namespace std;template <typename T, typename CONT = std::deque<T>>class Stack{private:CONT elems;            // elementspublic:void push(T const&);   // push elementvoid pop();            // pop elementT top() const;         // return top elementbool empty() const {   // return whether the stack is emptyreturn elems.empty();}// assign stack of elements of type T2template <typename T2, typename CONT2>Stack<T, CONT>& operator= (Stack<T2, CONT2> const&);};template <typename T, typename CONT>void Stack<T, CONT>::push(T const& elem){elems.push_back(elem);    // append copy of passed elem}template<typename T, typename CONT>void Stack<T, CONT>::pop(){if (elems.empty()) {throw std::out_of_range("Stack<>::pop(): empty stack");}elems.pop_back();         // remove last element}template <typename T, typename CONT>T Stack<T, CONT>::top() const{if (elems.empty()){throw std::out_of_range("Stack<>::top(): empty stack");}return elems.back();      // return copy of last element}template <typename T, typename CONT>template <typename T2, typename CONT2>Stack<T, CONT>&Stack<T, CONT>::operator= (Stack<T2, CONT2> const& op2){if ((void*)this == (void*)&op2)      // assignment to itself?{    return *this;}Stack<T2, CONT2> tmp(op2);         // create a copy of the assigned stackelems.clear();                   // remove existing elementswhile (!tmp.empty())             // copy all elements{           elems.push_front(tmp.top());tmp.pop();}return *this;}int main(){try {Stack<int>   intStack;       // stack of intsStack<float> floatStack;     // stack of floats// manipulate int stackintStack.push(42);intStack.push(7);// manipulate float stackfloatStack.push(7.7);// assign stacks of different typefloatStack = intStack;// print float stackstd::cout << floatStack.top() << std::endl;floatStack.pop();std::cout << floatStack.top() << std::endl;floatStack.pop();std::cout << floatStack.top() << std::endl;floatStack.pop();}catch (std::exception const& ex) {std::cerr << "Exception: " << ex.what() << std::endl;}// stack for ints using a vector as an internal containerStack<int, std::vector<int> > vStack;//...vStack.push(42);vStack.push(7);std::cout << vStack.top() << std::endl;vStack.pop();return 0;}

0 0
原创粉丝点击