shizaero

Untitled

May 13th, 2023
174
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.01 KB | None | 0 0
  1. #include <iostream>
  2. #include <vector>
  3. #include <algorithm>
  4. #include <numeric>
  5. using namespace std;
  6.  
  7. bool operator<(string left, string right) {
  8.     return left.size() < right.size();
  9. }
  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.         const Type& element = elements_.back();
  30.         return element;
  31.     }
  32.     Type& Peek() {
  33.         return elements_.back();
  34.     }
  35.     void Print() const {
  36.         for (const auto element : elements_) {
  37.             cout << element << " ";
  38.         }
  39.         cout << endl;
  40.     }
  41.     uint64_t Size() const {
  42.         return elements_.size();
  43.     }
  44.     bool IsEmpty() const {
  45.         return elements_.empty();
  46.     }
  47.  
  48. private:
  49.     vector<Type> elements_;
  50. };
  51.  
  52. template <typename Type>
  53. class StackMin {
  54. public:
  55.     void Push(const Type& element) {
  56.         // напишите реализацию метода
  57.         if (element < minimum_) minimum_ = element;
  58.         elements_.Push(element);
  59.         minimum_vector_.push_back(make_pair(element, minimum_));
  60.     }
  61.     void Pop() {
  62.         // напишите реализацию метода
  63.         elements_.Pop();
  64.         minimum_vector_.pop_back();
  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.     const Type& PeekMin() const {
  82.         //const auto result = (minimum_vector_.back()).get<1>(minimum_vector_);
  83.         const Type& result = minimum_vector_.back().second;
  84.         return result;
  85.     }
  86.  
  87.     Type& PeekMin() {
  88.         return minimum_vector_.back().second;
  89.     }
  90. private:
  91.     Stack<Type>                     elements_;
  92.     vector<pair<Type, Type>>        minimum_vector_; //element minimum
  93.     Type minimum_;
  94. };
  95.  
  96. int main() {
  97.     StackMin<string> stack;
  98.     vector<string> values(4);
  99.     // заполняем вектор для тестирования нашего стека
  100.     values.push_back("aaaa");
  101.     values.push_back("bbb");
  102.     values.push_back("ddddd");
  103.         // перемешиваем значения
  104.     random_shuffle(values.begin(), values.end());
  105.     // заполняем стек
  106.     for (int i = 0; i < 4; ++i) {
  107.         stack.Push(values[i]);
  108.     }
  109.     // печатаем стек и его минимум, постепенно убирая из стека элементы
  110.     while (!stack.IsEmpty()) {
  111.         stack.Print();
  112.         cout << "Min = "s << stack.PeekMin() << endl;
  113.         stack.Pop();
  114.     }
  115. }
Advertisement
Add Comment
Please, Sign In to add comment