Advertisement
kutuzzzov

Спринт 4. Урок 3. Очередь и дек

Jan 3rd, 2022 (edited)
678
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.44 KB | None | 0 0
  1. #include <stack>
  2. #include <deque>
  3. #include <iostream>
  4. #include <vector>
  5. #include <numeric>
  6. #include <algorithm>
  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. template <typename Type>
  19. class Queue {
  20. public:
  21.     void Push(const Type& element) {
  22.         while (!stack1_.empty()) {
  23.             stack2_.push(stack1_.top());
  24.             stack1_.pop();
  25.         }
  26.         stack1_.push(element);
  27.         while (!stack2_.empty()) {
  28.             stack1_.push(stack2_.top());
  29.             stack2_.pop();
  30.         }
  31.     }
  32.     void Pop() {
  33.         stack1_.pop();
  34.     }
  35.     Type& Front() {
  36.         return stack1_.top();
  37.     }
  38.     const Type& Front() const {
  39.         return stack1_.top();
  40.     }
  41.     uint64_t Size() const {
  42.         return stack1_.size();
  43.     }
  44.     bool IsEmpty() const {
  45.         return stack1_.empty();
  46.     }
  47.  
  48. private:
  49.     stack<Type> stack1_;
  50.     stack<Type> stack2_;
  51. };
  52.  
  53. int main() {
  54.     setlocale(LC_ALL, "Russian");
  55.     Queue<int> queue;
  56.     vector<int> values(5);
  57.  
  58.     // заполняем вектор для тестирования очереди
  59.     iota(values.begin(), values.end(), 1);
  60.     // перемешиваем значения
  61.     random_shuffle(values.begin(), values.end());
  62.  
  63.     PrintRange(values.begin(), values.end());
  64.  
  65.     cout << "Заполняем очередь"s << endl;
  66.  
  67.     // заполняем очередь и выводим элемент в начале очереди
  68.     for (int i = 0; i < 5; ++i) {
  69.         queue.Push(values[i]);
  70.         cout << "Вставленный элемент "s << values[i] << endl;
  71.         cout << "Первый элемент очереди "s << queue.Front() << endl;
  72.     }
  73.  
  74.     cout << "Вынимаем элементы из очереди"s << endl;
  75.  
  76.     // выводим элемент в начале очереди и вытаскиваем элементы по одному
  77.     while (!queue.IsEmpty()) {
  78.         // сначала будем проверять начальный элемент, а потом вытаскивать,
  79.         // так как операция Front на пустой очереди не определена
  80.         cout << "Будем вынимать элемент "s << queue.Front() << endl;
  81.         queue.Pop();
  82.     }
  83.     return 0;
  84. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement