Namespaces
Variants

std:: stack

From cppreference.net
Определено в заголовочном файле <stack>
template <

class T,
class Container = std:: deque < T >

> class stack ;

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

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

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

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

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

Содержание

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

T - Тип хранимых элементов. Программа некорректна, если T не совпадает с типом Container::value_type .
Container - Тип базового контейнера, используемого для хранения элементов. Контейнер должен удовлетворять требованиям SequenceContainer . Дополнительно он должен предоставлять следующие функции с обычной семантикой :

Стандартные контейнеры std::vector (включая std::vector<bool> ), std::deque и std::list удовлетворяют этим требованиям. По умолчанию, если для конкретной инстанциации класса stack не указан класс контейнера, используется стандартный контейнер 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
(public member function)
уничтожает stack
(public member function)
присваивает значения адаптеру контейнера
(public member function)
Доступ к элементам
доступ к верхнему элементу
(public member function)
Вместимость
проверяет, пуст ли адаптер контейнера
(public member function)
возвращает количество элементов
(public member function)
Модификаторы
вставляет элемент на вершину
(public member function)
(C++23)
вставляет диапазон элементов на вершину
(public member function)
(C++11)
конструирует элемент на месте на вершине
(public member function)
удаляет верхний элемент
(public member function)
(C++11)
обменивает содержимое
(public member function)

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

лексикографически сравнивает значения двух stack ов
(шаблон функции)
специализирует алгоритм std::swap
(шаблон функции)

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

специализирует std::uses_allocator type trait
(специализация шаблона класса)
поддержка форматирования для std::stack
(специализация шаблона класса)

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

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

Примечания

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

Пример

Отчеты о дефектах

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

DR Applied to Behavior as published Correct behavior
LWG 307 C++98 Container could not be std::vector<bool> allowed
LWG 2566 C++98 Missing the requirement for Container::value_type ill-formed if T is not the same type as Container::value_type

Смотрите также

изменяемый непрерывный массив
(шаблон класса)
эффективное по памяти динамическое битовое множество
(специализация шаблона класса)
двусторонняя очередь
(шаблон класса)
двусвязный список
(шаблон класса)