Spec-Zone.ru › C++

std::stack

Определён в заголовочном файле <stack>
template<
    class T,
    class Container = std::deque<T>
> class stack;

Класс std::stack — это адаптер контейнера, предоставляющий программисту функциональность стека — в частности, структуры данных LIFO (последним пришёл — первым вышел).

Шаблон класса служит оболочкой для базового контейнера и предоставляет только определённый набор функций. Стек добавляет и удаляет элементы с конца базового контейнера — с вершины стека.

Все функции-члены std::stack являются constexpr: объекты std::stack можно создавать и использовать при вычислении константного выражения.

Однако объявление переменной std::stack с constexpr обычно является ошибкой, поскольку при константном вычислении динамически выделенное хранилище должно быть освобождено в ходе того же вычисления, чего обычно не происходит при инициализации std::stack.

(начиная с C++26)

Параметры шаблона

T - Тип хранимых элементов. Программа некорректна, если T не является тем же типом, что и Container::value_type.
Container - Тип базового контейнера, используемого для хранения элементов. Контейнер должен удовлетворять требованиям SequenceContainer. Кроме того, он должен предоставлять следующие функции с обычной семантикой:
  • back(), например, std::vector::back(),
  • push_back(), например, std::deque::push_back(),
  • pop_back(), например, std::list::pop_back().

Этим требованиям удовлетворяют стандартные контейнеры std::vector (в том числе std::vector<bool>), std::deque и std::list. По умолчанию, если для конкретной инстанциации класса стека не указан класс контейнера, используется стандартный контейнер std::deque.

Типы-члены

Тип Определение
container_type Container
value_type Container::value_type
size_type Container::size_type
reference Container::reference
const_reference Container::const_reference

Объекты-члены

Член Описание
Container c
базовый контейнер
(защищённый объект-член)

Функции-члены

(конструктор)
создаёт stack
(открытая функция-член)
(деструктор)
уничтожает stack
(открытая функция-член)
operator=
присваивает значения адаптеру контейнера
(открытая функция-член)
Доступ к элементам
top
получает доступ к верхнему элементу
(открытая функция-член)
Ёмкость
empty
проверяет, пуст ли адаптер контейнера
(открытая функция-член)
size
возвращает количество элементов
(открытая функция-член)
Модификаторы
push
вставляет элемент на вершину
(открытая функция-член)
push_range
(C++23)
вставляет диапазон элементов на вершину
(открытая функция-член)
emplace
(C++11)
создаёт элемент непосредственно на вершине
(открытая функция-член)
pop
удаляет верхний элемент
(открытая функция-член)
swap
(C++11)
обменивает содержимое
(открытая функция-член)

Функции, не являющиеся членами

operator==operator!=operator<operator<=operator>operator>=operator<=>
(C++20)
лексикографически сравнивает значения двух объектов stack
(шаблон функции)
std::swap(std::stack)
(C++11)
специализирует алгоритм std::swap
(шаблон функции)

Вспомогательные классы

std::uses_allocator<std::stack>
(C++11)
специализирует признак типа std::uses_allocator
(специализация шаблона класса)
std::formatter<std::stack>
(C++23)
поддержка форматирования для std::stack
(специализация шаблона класса)

Руководства по выводy типов

(начиная с C++17)

Примечания

Макрос проверки поддержки возможностей Значение Стандарт Возможность
__cpp_lib_containers_ranges 202202L (C++23) Создание и вставка диапазонов для контейнеров
__cpp_lib_constexpr_stack 202502L (C++26) Константное выражение std::stack

Пример

Отчёты об ошибках

Следующие отчёты об ошибках, изменяющие поведение, были задним числом применены к ранее опубликованным стандартам C++.

Отчёт об ошибке Применён к Опубликованное поведение Исправленное поведение
LWG 307 C++98 Container не мог быть std::vector<bool> разрешено
LWG 2566 C++98 Отсутствовало требование для Container::value_type некорректно, если T не является тем же типом, что и Container::value_type

См. также

vector
динамический массив с непрерывным размещением элементов
(шаблон класса)
vector<bool>
динамический битовый набор с эффективным использованием памяти
(специализация шаблона класса)
deque
двусторонняя очередь
(шаблон класса)
list
двусвязный список
(шаблон класса)

© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/cpp/container/stack

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API