nochnoikoshmar1

Untitled

Apr 21st, 2023
67
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.89 KB | None | 0 0
  1. #include <cmath>
  2. #include <map>
  3. #include <string>
  4. #include <algorithm>
  5. #include <iostream>
  6. #include <set>
  7. #include <utility>
  8. #include <vector>
  9. #include <numeric>
  10. #include <chrono>
  11. #include <type_traits>
  12. #include <cassert>
  13. #include <sstream>
  14. #include <unordered_map>
  15. #include <stdexcept>
  16. #include <stack>
  17. #include <iterator>
  18. using namespace std;
  19.  
  20. template <typename Type>
  21. ostream &operator<<(ostream &out, const pair<Type,Type> &range){
  22.     //for(Type it = range.begin(); it != range.end(); ++it){
  23.         out << range.first << " " << range.second << endl;
  24.     //}
  25.     return out;
  26. }
  27.  
  28. template <typename It>
  29. void PrintRange(It range_begin, It range_end){
  30.     for(auto it = range_begin; it != range_end; ++it){
  31.         cout << *it << " "s;
  32.     }
  33.     cout << endl;
  34. }
  35.  
  36. template <typename Type>
  37. class Stack{
  38. public:
  39.     void Push(const Type &element){ //Вставка элемента в стек
  40.         elements_.push_back(element);
  41.     }
  42.     void Pop(){ //Удаление элемента из стека
  43.         elements_.pop_back();
  44.     }
  45.     const Type &Peek() const{ //Получение значения вершины стека
  46.         /*const Type type;
  47.         for(size_t i = 0; i < elements_.size(); ++i){
  48.             if(elements_.at(i) == elements_.size() - 1){
  49.                 type = elements_.at(i);
  50.             }            
  51.         }
  52.         return type;*/
  53.         //return elements_[static_cast<int>(elements_.size()) - 1];
  54.         return elements_.back();
  55.     }
  56.     Type &Peek(){ //Получение значения вершины стека
  57.         /*Type type;
  58.         for(size_t i = 0; i < elements_.size(); ++i){
  59.             if(elements_.at(i) == elements_.size() - 1){
  60.                 type = elements_.at(i);
  61.             }
  62.         }
  63.         return type;*/
  64.         //return elements_[static_cast<int>(elements_.size()) - 1];
  65.         return elements_.back();
  66.     }
  67.     void Print() const{ // вывод в консоль
  68.         PrintRange(elements_.begin(), elements_.end());
  69.     }
  70.     uint64_t Size() const{ //Размер стека — Size
  71.         //return static_cast<uint64_t>(elements_.size());
  72.         return elements_.size();
  73.     }
  74.     bool IsEmpty() const{ //Проверка на пустоту
  75.         return elements_.empty();
  76.     }
  77.     const Type &Front() const{
  78.         return elements_.front();
  79.     }
  80.     Type &Front(){
  81.         return elements_.front();
  82.     }
  83.     ~Stack(){};
  84. private:
  85.     vector<Type> elements_;
  86. };
  87.  
  88. template <typename Type>
  89. class StackMin{
  90. public:    
  91.     void Push(const Type &element){
  92.         if(element < minimum_.Front().first){
  93.             //minimum_.Push({element,element});
  94.             minimum_.Push({minimum_.Front().first,element});
  95.         }        
  96.     }
  97.     void Pop(){
  98.         if(minimum_.Size() != 0){
  99.             minimum_.Pop();
  100.         }
  101.     }
  102.     const Type &Peek() const{
  103.         return minimum_.Peek();
  104.     }
  105.     Type &Peek(){
  106.         return minimum_.Peek();
  107.     }
  108.     void Print() const{
  109.         //PrintRange(minimum_.Front().second,minimum_.Front().second);
  110.         minimum_.Print();
  111.     }
  112.     uint64_t Size() const{
  113.         return minimum_.Size();
  114.     }
  115.     bool IsEmpty() const{
  116.         return minimum_.IsEmpty();
  117.     }
  118.     const Type PeekMin() const{
  119.         return minimum_.Front().second;
  120.     }
  121.     Type PeekMin(){
  122.         return minimum_.Front().second;
  123.     }
  124.     ~StackMin(){};
  125. private:
  126.     Stack<pair<Type, Type>> minimum_;
  127. };
  128.  
  129. int main(){
  130.     setlocale(LC_ALL, "");
  131.     StackMin<int> stack;
  132.     //Stack<int> stack2;
  133.     vector<int> values(5);
  134.     iota(values.begin(), values.end(), 1);
  135.     //std::random_shuffle(values.begin(), values.end());
  136.     for(int i = 0; i < 5; ++i){
  137.         stack.Push(values[i]);
  138.     }
  139.     while(!stack.IsEmpty()){
  140.         stack.Print();
  141.         cout << "Минимум = "s << stack.PeekMin() << endl;
  142.         stack.Pop();
  143.     }
  144. }
Advertisement
Add Comment
Please, Sign In to add comment