kutuzzzov

Спринт 4. Урок 2 Стек. Задача 3/3

Jan 2nd, 2022 (edited)
412
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.46 KB | None | 0 0
  1. #include <algorithm>
  2. #include <iostream>
  3. #include <string>
  4. #include <utility>
  5. #include <vector>
  6. #include <functional>
  7. #include <numeric>
  8.  
  9. using namespace std;
  10.  
  11. template <typename It>
  12. void PrintRange(It range_begin, It range_end) {
  13.     for (auto it = range_begin; it != range_end; ++it) {
  14.         cout << *it << " "s;
  15.     }
  16.     cout << endl;
  17. }
  18.  
  19. template <typename Type>
  20. class Stack {
  21. public:
  22.     void Push(const Type& element) {
  23.         elements_.push_back(element);
  24.     }
  25.     void Pop() {
  26.         elements_.pop_back();
  27.     }
  28.     const Type& Peek() const {
  29.         return elements_.back();
  30.     }
  31.     Type& Peek() {
  32.         return elements_.back();
  33.     }
  34.     void Print() const {
  35.         PrintRange(elements_.begin(), elements_.end());
  36.     }
  37.     uint64_t Size() const {
  38.         return elements_.size();
  39.     }
  40.     bool IsEmpty() const {
  41.         return elements_.empty();
  42.     }
  43.  
  44. private:
  45.     vector<Type> elements_;
  46. };
  47.  
  48. template <typename Type>
  49. class SortedStack {
  50. public:
  51.     void Push(const Type& element) {
  52.     // напишите реализацию метода
  53.         if (elements_.IsEmpty() || element <= elements_.Peek()) {
  54.             elements_.Push(element);
  55.         } else {
  56.             auto element_new = elements_.Peek();
  57.             elements_.Pop();
  58.             Push(element);
  59.             elements_.Push(element_new);
  60.         }
  61.     }
  62.     void Pop() {
  63.     // напишите реализацию метода
  64.     elements_.Pop();
  65.     }
  66.     const Type& Peek() const {
  67.     return elements_.Peek();
  68.     }
  69.     Type& Peek() {
  70.     return elements_.Peek();
  71.     }
  72.     void Print() const {
  73.     elements_.Print();
  74.     }
  75.     uint64_t Size() const {
  76.     return elements_.Size();
  77.     }
  78.     bool IsEmpty() const {
  79.     return elements_.IsEmpty();
  80.     }
  81. private:
  82.     Stack<Type> elements_;
  83. };
  84.  
  85. int main() {
  86.     SortedStack<int> stack;
  87.     vector<int> values(5);
  88.  
  89.     // заполняем вектор для тестирования нашего стека
  90.     iota(values.begin(), values.end(), 1);
  91.     // перемешиваем значения
  92.     random_shuffle(values.begin(), values.end());
  93.  
  94.     // заполняем стек и проверяем, что сортировка сохраняется после каждой вставки
  95.     for (int i = 0; i < 5; ++i) {
  96.         cout << "Вставляемый элемент = "s << values[i] << endl;
  97.         stack.Push(values[i]);
  98.         stack.Print();
  99.     }
  100. }
Add Comment
Please, Sign In to add comment