Advertisement
Guest User

Untitled

a guest
May 5th, 2018
74
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.33 KB | None | 0 0
  1. #include <iostream>
  2. #include <vector>
  3. #include <cstdlib>
  4. #include <algorithm>
  5. #include <typeinfo>
  6.  
  7.  
  8. using namespace std;
  9.  
  10. template <typename T, bool isString = (string == typeid(T).name())>
  11. class Stack {
  12. private:
  13.     vector<T> elems;
  14. public:
  15.     void push(T const&);
  16.     T& pop();
  17.     T top() const;
  18.     T maxElement() const;
  19.     bool empty() const{
  20.         return elems.empty();
  21.     }
  22. };
  23.  
  24.  
  25. template <typename T, bool isString>
  26. void Stack<T, isString>::push (T const& elem){
  27.     elems.push_back(elem);
  28. }
  29.  
  30.  
  31. template <typename T, bool isString>
  32. T& Stack<T, isString>::pop (){
  33.     if (elems.empty()){
  34.         throw out_of_range( "Stack<>::pop(): empty stack" );
  35.     }
  36.     return elems.pop_back();
  37. }
  38.  
  39.  
  40.  
  41.  
  42. template <typename T, bool isString>
  43. T Stack<T, isString>::top () const{
  44.     if (elems.empty()){
  45.         throw out_of_range( "Stack<>::top(): empty stack" );
  46.     }
  47.     return elems.back();
  48. }
  49.  
  50.  
  51.  
  52.  
  53. template <typename T, bool isString>
  54. T Stack<T, isString>::maxElement() const{
  55.     int max = elems[0];
  56.     for (int i = 1; i < elems.size(); i++){
  57.         if (elems[i] > max){
  58.             max = elems[i];
  59.         }
  60.     }
  61.     return max;
  62. }
  63.  
  64.  
  65. template <typename T>
  66. class Stack<T, true> {
  67.  
  68. private:
  69.     vector<string> elems;
  70.     vector<string> addelems;
  71. public:
  72.      void pushstring(T const&);
  73.      T& popstring();
  74.      T topstring() const;
  75.      T topreversedstring() const;
  76.      void reverseString();
  77. };
  78.  
  79. template <typename T>
  80. T& Stack<T, true>::popstring (){
  81.     if (elems.empty()){
  82.         throw out_of_range( "Stack<>::pop(): empty stack" );
  83.     }
  84.     elems.pop_back();
  85. }
  86.  
  87.  
  88.  
  89. template <typename T>
  90. void Stack<T, true>::pushstring (T const& elem){
  91.     elems.push_back(elem);
  92. }
  93.  
  94.  
  95.  
  96. template <typename T>
  97. T Stack<T, true>::topstring () const{
  98.     if (addelems.empty()){
  99.         throw out_of_range( "Stack<>::top(): empty stack" );
  100.     }
  101.     return addelems.back();
  102. }
  103.  
  104.  
  105. template <typename T>
  106. T Stack<T, true>::topreversedstring () const{
  107.     if (elems.empty()){
  108.         throw out_of_range( "Stack<>::top(): empty stack" );
  109.     }
  110.     return elems.back();
  111. }
  112.  
  113.  
  114. template <typename T>
  115. void Stack<T, true>::reverseString(){
  116.     for (int i = 0; i < elems.size(); i++){
  117.         addelems.push_back(elems[i]);
  118.         reverse(elems[i].begin(), elems[i].end());
  119.     }
  120. }
  121.  
  122.  
  123. /////
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement