14. STL. Stack. Адаптеры контейнеров.

STL. Stack. Адаптеры контейнеров.

Stack не является самостоятельным контейнером, он лишь может модифицировать ПРАВИЛА обращения к памяти для других контейнеров:

Как известно стек – структура памяти, при которой новые элементы могут добавляться лишь в конце имеющихся данных.
А например в списки мы можем добавлять данные и в начало и в середину и в конец.
НО объединив контейнер списка с адаптером стека мы получим список, в котором элементы можно добавлять лишь в конец.

Т.е. стек ограничит функционал базового контейнера, что положен в их основу (вектор/лист) правилами стека.

Для работы со стеком необходимо подключить библиотеку
#include <stack>
Stack входит в пространство имен std, поэтому или пишем std:: или используем пространство имен using namespace std;

stack MyStack;
MyStack.push(1);    //добавляем элемент путем создания и копирования
MyStack.emplace(2); //добавляем элемент путем создания БЕЗ копирования
MyStack.emplace(3); //добавляем элемент путем создания БЕЗ копирования
MyStack.pop();      //удаляет ПОСЛЕДНИЙ элемент т.е. 3
MyStack.size();     //число элементов внутри стека

MyStack.top();      //возвращает ссылку на последний элемент

cout<<MyStack.top()<<endl; //выведет число 2 (т.к. 3 удалили)

stack<int, list<int>> MyStackList; //создаем стек для данных типа int, организация памяти по шаблону двусвязного списка
По сути – мы создаем стек, внутри которого находится список, который хранит данные типа int.
Адаптер стек организуем обращение к данным типа int по правилам стека.

В зависимости от используемого контейнера может изменяться быстродействие в тех или иных операциях.

Циклом перебрать элементы стека нельзя, т.к. мы можем взаимодействовать лишь с последним элементом. Итераторы со стеком не работают!!!
Посмотреть все элементы стека можно лишь выводя (метод .top) и потом удаляя (метод .pop) ПОСЛЕДНИЙ элемент.

В основу стека зачастую положен контейнер типа deque, с дополнительными методами, поэтому зачастую (в некоторых средах) можно получить доступ к изначальному deque и иным контейнерам в обход стека.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *