View difference between Paste ID: uQQwi8cx and VN8hcyJA
SHOW: | | - or go back to the newest paste.
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
}