Advertisement
daniil_mironoff

lab2

Mar 6th, 2020
144
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 4.25 KB | None | 0 0
  1. #include <iostream>
  2. #include <deque>
  3.  
  4. using namespace std;
  5.  
  6.  
  7. ////////////////////////////////////////////////////////////////
  8.  
  9.  
  10. template< class T  >
  11. class stack {
  12.  
  13.     private:
  14.         deque<T> container;
  15.  
  16. //--------------------------------------------------------------
  17.  
  18.     public:
  19.         // Дефолтный констурктор
  20.         stack() { /* ... */ }
  21.  
  22. //--------------------------------------------------------------
  23.  
  24.         // Копирующий конструктор
  25.         stack(const stack& value) : container(value.container) { /* ... */ }
  26.  
  27. //--------------------------------------------------------------
  28.        
  29.         // Возвращает стэк с присвоенными данными
  30.         stack<T>& operator= (const stack& value) {
  31.             container = value.container;
  32.  
  33.             return (*this);
  34.         }
  35.  
  36. //--------------------------------------------------------------
  37.  
  38.         // Возвращает стэк с новым элементом
  39.         stack<T> operator+ (const T& value) const {
  40.             stack<T> tempStack(*this);
  41.             tempStack.container.push_back(value);
  42.  
  43.  
  44.  
  45.             return tempStack;
  46.         }
  47.  
  48. //--------------------------------------------------------------
  49.  
  50.         // Возвращает стэк с умноженой верхушкой
  51.         stack<T> operator* (const T& value) const {
  52.             stack<T> tempStack(*this);
  53.             tempStack.container.back() *= value;
  54.  
  55.  
  56.  
  57.             return tempStack;
  58.         }
  59.  
  60. //--------------------------------------------------------------
  61.  
  62.         // Возвращает стэк без последнего элемента
  63.         stack<T> operator- ( ) const {
  64.             stack<T> tempStack(*this);
  65.             tempStack.container.pop_back();
  66.  
  67.  
  68.  
  69.             return tempStack;
  70.         }
  71.  
  72. //--------------------------------------------------------------
  73.  
  74.         // Сравнивает контейнеры
  75.         bool operator== (const stack<T>& value) const {
  76.  
  77.             return value.container == container;
  78.         }
  79.  
  80. //--------------------------------------------------------------
  81.  
  82.         // Сравнивает контейнеры
  83.         bool operator!= (const stack<T>& value) {
  84.  
  85.             return value.container != container;
  86.         }
  87.  
  88. //--------------------------------------------------------------
  89.  
  90.         // Добавляет в контейнер элементы аргумента
  91.         void operator+= (const stack<T>& value) {
  92.             for (auto iter : value.container) {
  93.                 container.push_back(iter);
  94.             }
  95.         }
  96.  
  97. //--------------------------------------------------------------
  98.  
  99.         // Добавляет в контейнер аргумент
  100.         void operator+= (const T& value)
  101.             { container.push_back(value); }
  102.  
  103. //--------------------------------------------------------------
  104.  
  105.         // Добавление нового элемента через cin
  106.         friend istream& operator>>(istream& stream, stack<T>& con) {
  107.             T value; stream >> value;
  108.             con.container.push_back(value);
  109.  
  110.  
  111.  
  112.             return stream;
  113.         }
  114.  
  115. //--------------------------------------------------------------
  116.  
  117.         // Вывод последнего элемента через cout
  118.         friend ostream& operator<<(ostream& stream, stack<T> container)
  119.             { stream << container.container.back(); return stream; }
  120.  
  121.  
  122. };
  123.  
  124.  
  125. ////////////////////////////////////////////////////////////////
  126.  
  127. int main() {
  128.     cout.setf(ios::boolalpha);
  129.  
  130.     stack<int> testStack1;
  131.     cout << "Input first element testStack1<int>: "; cin >> testStack1;
  132.     cout << "First element testStack1: " << testStack1 << endl;
  133.     testStack1 += 2;
  134.     testStack1 += 4;
  135.     testStack1 += 8;
  136.     testStack1 += 16;
  137.  
  138.     stack<int> testStack2(testStack1 + 32);
  139.     cout << (-testStack1) << endl << (testStack2 * 10) << endl;
  140.     cout << "testStack1 == testStack2: " << (testStack1 == testStack2) << endl;
  141.     cout << "testStack1 != testStack2: " << (testStack1 != testStack2) << endl;
  142.  
  143.     testStack1 += testStack2;
  144.     cout << "testStack1 += testStack2: " << testStack1 << endl;
  145.  
  146.  
  147.  
  148.     return 0;
  149. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement