Advertisement
chevengur

СПРИНТ № 5 | Стек, очередь, дек | Урок 2: Стек 3/3

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