- //two versions of implement of stack
- #include <iostream>
- #include<vector>
- using namespace std;
- /*
- template<typename T>
- class Stack
- {
- vector<T> elems; //elements;
- public:
- void Push(T const&);
- void Pop();
- T Top()const;
- bool Empty()const
- {
- return elems.empty();
- }
- };
- template<typename T>
- void Stack<T>::Push(T const& elem)
- {
- elems.Push_Back(); //append copy of passed elem
- }
- template<typename T>
- void Stack<T>::Pop()
- {
- if (elems.empty())
- throw std::out_of_range("Stack<>::Pop(): empty stack");
- elems.Pop_Back(); //remove last element
- }
- template<typename T>
- T Stack<T>::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,int MAXSIZE>
- class Stack
- {
- T elems[MAXSIZE];
- int numElems;
- public:
- Stack();
- void Push(T const&);
- void Pop();
- T Top()const;
- bool Empty()const
- {
- return numElems == MAXSIZE;
- }
- };
- template<typename T,int MAXSIZE>
- Stack<T,MAXSIZE>::Stack() : numElems(0)
- {
- //do nothing or something else
- }
- template<typename T,int MAXSIZE>
- void Stack<T,MAXSIZE>::Push(T const& elem)
- {
- if (numElems == MAXSIZE) exit(1); //out_of_range() is not a member of 'std'
- //throw std::out_of_range("Stack<>::Push():stack is full");
- elems[numElems++] = elem; //append a element and increment number of elements
- }
- template<typename T,int MAXSIZE>
- void Stack<T,MAXSIZE>::Pop()
- {
- if (numElems <= 0) exit(1);
- //throw std::out_of_range("stack<>::Pop)_:Empty stack");
- --numElems;
- }
- template<typename T,int MAXSIZE>
- T Stack<T,MAXSIZE>::Top()const
- {
- if (numElems <= 0) exit(1); //
- //throw std::out_of_range("Stack<>::Top():empty stack");
- return elems[numElems-1]; //return last element
- }
- int main(void) //test for template<typename T,int MAXSIZE> class Stack
- {
- try
- {
- Stack<int,20> int20Stack; //stack of up to 20 ints
- Stack<int,40> int40Stack;
- Stack<std::string,40> stringStack; //stack of up to 40 strings
- //mainpulate stack of up to 20 ints
- int20Stack.Push(7);
- cout<<int20Stack.Top()<<endl;
- int20Stack.Pop();
- int40Stack.Push(8);
- cout<<int40Stack.Top()<<endl;
- int40Stack.Pop();
- //mainpulate stack of up to 40 strings
- stringStack.Push("hello");
- cout<<stringStack.Top()<<endl;
- stringStack.Pop();
- stringStack.Pop();
- }
- catch (std::exception const& ex)
- {
- std::cerr<<"Exception: "<<ex.what()<<endl;
- return EXIT_FAILURE; //exit program with ERROR status
- }
- return 0;
- }
two versions of implement of stack
最新推荐文章于 2024-05-19 23:37:04 发布