Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <vector>
- #include <algorithm>
- #include <random>
- #include <numeric>
- #include <utility>
- 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 SortedSack {
- public:
- void Push(const Type& element) {
- if (elements_.empty()) {
- elements_.push_back(element);
- return;
- }
- auto end = elements_.back();
- if (element < elements_.back()) {
- 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(elements_.begin(), elements_.end());
- }
- uint64_t Size() const {
- return elements_.size();
- }
- bool IsEmpty() const {
- return elements_.empty();
- }
- private:
- vector<Type> elements_;
- };
- int main() {
- setlocale(0, "");
- SortedSack<int> sack;
- vector<int> values(5);
- // заполняем вектор для тестирования нашего класса
- iota(values.begin(), values.end(), 1);
- // перемешиваем значения
- random_device rd;
- mt19937 g(rd());
- shuffle(values.begin(), values.end(), g);
- // заполняем класс и проверяем, что сортировка сохраняется после каждой вставки
- for (int i = 0; i < 5; ++i) {
- cout << "Вставляемый элемент = "s << values[i] << endl;
- sack.Push(values[i]);
- sack.Print();
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement