two versions of implement of stack

  1. //two versions of implement of stack
  2. #include <iostream>
  3. #include<vector>
  4. using namespace std;
  5. /*
  6. template<typename T>
  7. class Stack
  8. {
  9.     vector<T> elems;   //elements;
  10. public:
  11.     void Push(T const&);
  12.     void Pop();
  13.     T Top()const;
  14.     bool Empty()const
  15.     {
  16.         return elems.empty();
  17.     }
  18. };
  19. template<typename T>
  20. void Stack<T>::Push(T const& elem)
  21. {
  22.     elems.Push_Back();     //append copy of passed elem
  23. }
  24. template<typename T>
  25. void Stack<T>::Pop()
  26. {
  27.     if (elems.empty())
  28.         throw std::out_of_range("Stack<>::Pop(): empty stack");
  29.     elems.Pop_Back();    //remove last element
  30. }
  31. template<typename T>
  32. T Stack<T>::Top()const
  33. {
  34.     if (elems.empty())
  35.         throw std::out_of_range("Stack<>::Top():Empty Stack");
  36.     return elems.Back();   //return copy of last element
  37. }
  38. */
  39. template<typename T,int MAXSIZE>
  40. class Stack
  41. {
  42.     T elems[MAXSIZE];
  43.     int numElems;
  44. public:
  45.     Stack();
  46.     void Push(T const&);
  47.     void Pop();
  48.     T Top()const;
  49.     bool Empty()const
  50.     {
  51.         return numElems == MAXSIZE;
  52.     }
  53. };
  54. template<typename T,int MAXSIZE>
  55. Stack<T,MAXSIZE>::Stack() : numElems(0)
  56. {
  57.     //do nothing or something else
  58. }
  59. template<typename T,int MAXSIZE>
  60. void Stack<T,MAXSIZE>::Push(T const& elem)
  61. {
  62.     if (numElems == MAXSIZE) exit(1);  //out_of_range() is not a member of 'std'
  63.         //throw std::out_of_range("Stack<>::Push():stack is full");
  64.     elems[numElems++] = elem;   //append a element and increment number of elements
  65. }
  66. template<typename T,int MAXSIZE>
  67. void Stack<T,MAXSIZE>::Pop()
  68. {
  69.     if (numElems <= 0) exit(1);
  70.         //throw std::out_of_range("stack<>::Pop)_:Empty stack");
  71.     --numElems;
  72. }
  73. template<typename T,int MAXSIZE>
  74. T Stack<T,MAXSIZE>::Top()const
  75. {
  76.     if (numElems <= 0) exit(1);  //
  77.         //throw std::out_of_range("Stack<>::Top():empty stack");
  78.     return elems[numElems-1];   //return last element
  79. }
  80. int main(void)   //test for template<typename T,int MAXSIZE> class Stack
  81. {
  82.     try
  83.     {
  84.         Stack<int,20> int20Stack;  //stack of up to 20 ints
  85.         Stack<int,40> int40Stack;
  86.         Stack<std::string,40> stringStack;   //stack of up to 40 strings
  87.         //mainpulate stack of up to 20 ints
  88.         int20Stack.Push(7);
  89.         cout<<int20Stack.Top()<<endl;
  90.         int20Stack.Pop();
  91.         int40Stack.Push(8);
  92.         cout<<int40Stack.Top()<<endl;
  93.         int40Stack.Pop();
  94.         //mainpulate stack of up to 40 strings
  95.         stringStack.Push("hello");
  96.         cout<<stringStack.Top()<<endl;
  97.         stringStack.Pop();
  98.         stringStack.Pop();
  99.     }
  100.     catch (std::exception const& ex)
  101.     {
  102.         std::cerr<<"Exception: "<<ex.what()<<endl;
  103.         return EXIT_FAILURE;  //exit program with ERROR status
  104.     }
  105.     return 0;
  106. }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值