std::stack C++. Стек из контейнеров стандартной библиотеки.

- Контейнер 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) Конструктор стека из списка инициализации. stack st({4, 6, 8}); O(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();   // Удаляем элемент из вершины стека
    }
}
2023-12-15



Понравилась страница?
Добавить в закладки
Или поделиться!

Связанные темы

array - статический массив (после создания размер не изменяется). Быстрее вектора.
Выбор контейнера из стандартной библиотеки С++.
deque - двусторонняя очередь (дек). Эффективное вставка-удаление по концам очереди.
forward_list - односвязный список с эффективной вставкой/удалением в начало списка.
list - двусвязный список с эффективной вставкой/удалением в любом месте списка.
map - словарь сортированных уникальных пар ключ-значение.
multimap - словарь сортированных неуникальных пар ключ-значение.
multiset - множество сортированных неуникальных элементов.
priority_queue - очередь с приоритетом (с сортировкой значений).
queue - очередь FIFO first in, first out "первый пришел - первый ушел".
set - множество сортированных уникальных элементов.
stack - стек LIFO last in, first out "последний пришел - первый ушел".
unordered_map - словарь несортированных уникальных пар ключ-значение.
unordered_multimap - словарь несортированных неуникальных пар ключ-значение.
unordered_multiset - множество несортированных неуникальных значений.
unordered_set - множество несортированных уникальных значений.
vector - вектор (массив) значений с изменяемым размером.