Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <vector>
- #include <numeric>
- #include <algorithm>
- using namespace std;
- template <typename It>
- void PrintRange(It range_begin, It range_end) {
- for (auto it = range_begin; it != range_end; ++it) {
- cout << *it << " "s;
- }
- cout << endl;
- }
- template <typename Type>
- class SortedStack {
- public:
- void Push(const Type& element) {
- if (elements_.empty()){
- elements_.push_back(element);
- return;
- }
- auto end = elements_.back();
- if (element<=end) {
- elements_.push_back(element);
- }else{
- elements_.pop_back();
- Push(element);
- elements_.push_back(end);
- }
- }
- void Pop() {
- elements_.pop_back();
- }
- const Type& Peek() const {
- return elements_.back();
- }
- Type& Peek() {
- return elements_.back();
- }
- void Print() const {
- PrintRange(begin(elements_), end(elements_));
- }
- uint64_t Size() const {
- return elements_.size();
- }
- bool IsEmpty() const {
- return elements_.empty();
- }
- private:
- vector<Type> elements_;
- };
- int main() {
- SortedStack<int> stack;
- vector<int> values(5);
- // заполняем вектор для тестирования нашего стека
- iota(values.begin(), values.end(), 1);
- // перемешиваем значения
- random_shuffle(values.begin(), values.end());
- // заполняем стек и проверяем, что сортировка сохраняется после каждой вставки
- for (int i = 0; i < 5; ++i) {
- cout << "Вставляемый элемент = "s << values[i] << endl;
- stack.Push(values[i]);
- stack.Print();
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment