delix777

Спринт 5. Стек. Задание 3.

Feb 2nd, 2024
92
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. #include <iostream>
  2. #include <vector>
  3. #include <numeric>
  4. #include <algorithm>
  5.  
  6. using namespace std;
  7.  
  8. template <typename It>
  9. void PrintRange(It range_begin, It range_end) {
  10.     for (auto it = range_begin; it != range_end; ++it) {
  11.         cout << *it << " "s;
  12.     }
  13.     cout << endl;
  14. }
  15.  
  16. template <typename Type>
  17. class SortedStack {
  18. public:
  19.     void Push(const Type& element) {
  20.         if (elements_.empty()){
  21.             elements_.push_back(element);
  22.             return;
  23.         }        
  24.         auto end = elements_.back();        
  25.         if (element<=end) {            
  26.             elements_.push_back(element);
  27.         }else{
  28.             elements_.pop_back();
  29.             Push(element);          
  30.             elements_.push_back(end);
  31.         }
  32.     }
  33.     void Pop() {
  34.         elements_.pop_back();
  35.     }
  36.     const Type& Peek() const {
  37.         return elements_.back();
  38.     }
  39.     Type& Peek() {
  40.         return elements_.back();
  41.     }
  42.     void Print() const {
  43.         PrintRange(begin(elements_), end(elements_));
  44.     }
  45.     uint64_t Size() const {
  46.         return elements_.size();
  47.     }
  48.     bool IsEmpty() const {
  49.         return elements_.empty();
  50.     }
  51. private:
  52.     vector<Type> elements_;
  53. };
  54.  
  55. int main() {
  56.     SortedStack<int> stack;
  57.     vector<int> values(5);
  58.     // заполняем вектор для тестирования нашего стека
  59.     iota(values.begin(), values.end(), 1);
  60.     // перемешиваем значения
  61.     random_shuffle(values.begin(), values.end());
  62.     // заполняем стек и проверяем, что сортировка сохраняется после каждой вставки
  63.     for (int i = 0; i < 5; ++i) {
  64.         cout << "Вставляемый элемент = "s << values[i] << endl;
  65.         stack.Push(values[i]);
  66.         stack.Print();
  67.     }
  68. }
Add Comment
Please, Sign In to add comment