- Контейнер std::stack или стек, обеспечивает доступ к элементам по принципу LIFO (last in, first out "последний пришел - первый ушел", аналогия со стопкой тарелок или пачкой бумаги), где пришедшие соответствуют записываемым элементам, а ушедшие считываемым. Подключается через #include <stack>.
- Элементы добавляются/удаляются и считываются из вершины стека.
- Если требуется контейнер обеспечивает доступ к элементам по принципу FIFO (first in, first out "первый пришел - первый ушел") используйте std::queue.
Метод | Описание | Пример | Сложность | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
emplace(Args&&... args) | Создает и вставляет элемент в вершину стека. | st.emplace(2); | O(1) | ||||||||||||
empty() | Возвращает пустой ли стек. | if(st.empty()) | O(1) | ||||||||||||
pop() | Удаляет верхний элемент стека. | st.pop(); | O(1) | ||||||||||||
push(const T& val) | Вставляет элемент в вершину стека. | st.push(12); | O(1) | ||||||||||||
size() | Возвращает количество элементов стека. | size_t sz = st.size(); | O(1) | ||||||||||||
stack() | Конструктор пустого стека; | stack<int> st; | O(1) | ||||||||||||
stack(initializer_list<value_type> il) | Конструктор стека из списка инициализации. | stackO(n)
| stack(const cont_type cn)
| Конструктор копирования, создает стек из значений другого контейнера.
| stack st(v);
| O(n)
| swap(stack& st1)
| Обменивает содержимое 2х стеков
| st.swap(st1);
| O(1)
| top()
| Возвращает ссылку на верхний элемент стека
| auto i = st.top();
| O(1)
| |
#include <iostream> // cout
#include <stack> // stack
#include <vector> // vector
int main() {
std::stack<int> st1; // Создали пустой стек
std::stack<int> st2({4, 6, 8}); // Создали стек из списковой инициализации
std::vector v{1, 3, 5, 7}; // Создали вектор
std::stack st3(v); // Создали стек конструктором копирования из значений вектора
std::stack st4 = st3; // Создание стека конструктором присваивания
st3.push(100); // Вставляем значение в вершину стека
size_t sz = st4.size(); // Получили размер стека = 4
for(size_t i = 0; i < sz; i++){ // Перебираем стек
std::cout << st4.top() << " "; //7 5 3 1 Выводим значения стека
st4.pop(); // Удаляем элемент из вершины стека
}
}