std::stack
Определён в заголовочном файле <stack> | ||
|---|---|---|
template<
class T,
class Container = std::deque<T>
> class stack;
|
Класс std::stack — это адаптер контейнера, предоставляющий программисту функциональность стека — в частности, структуры данных LIFO (последним пришёл — первым вышел).
Шаблон класса служит оболочкой для базового контейнера и предоставляет только определённый набор функций. Стек добавляет и удаляет элементы с конца базового контейнера — с вершины стека.
| Все функции-члены Однако объявление переменной | (начиная с C++26) |
Параметры шаблона
| T | - | Тип хранимых элементов. Программа некорректна, если T не является тем же типом, что и Container::value_type. |
| Container | - | Тип базового контейнера, используемого для хранения элементов. Контейнер должен удовлетворять требованиям SequenceContainer. Кроме того, он должен предоставлять следующие функции с обычной семантикой:
Этим требованиям удовлетворяют стандартные контейнеры |
Типы-члены
| Тип | Определение |
|---|---|
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 (открытая функция-член) |
|
| присваивает значения адаптеру контейнера (открытая функция-член) |
|
Доступ к элементам |
|
| получает доступ к верхнему элементу (открытая функция-член) |
|
Ёмкость |
|
| проверяет, пуст ли адаптер контейнера (открытая функция-член) |
|
| возвращает количество элементов (открытая функция-член) |
|
Модификаторы |
|
| вставляет элемент на вершину (открытая функция-член) |
|
|
(C++23) | вставляет диапазон элементов на вершину (открытая функция-член) |
|
(C++11) | создаёт элемент непосредственно на вершине (открытая функция-член) |
| удаляет верхний элемент (открытая функция-член) |
|
|
(C++11) | обменивает содержимое (открытая функция-член) |
Функции, не являющиеся членами
|
(C++20) | лексикографически сравнивает значения двух объектов stack (шаблон функции) |
|
(C++11) | специализирует алгоритм std::swap (шаблон функции) |
Вспомогательные классы
|
(C++11) | специализирует признак типа std::uses_allocator (специализация шаблона класса) |
|
(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 |
См. также
| динамический массив с непрерывным размещением элементов (шаблон класса) |
|
| динамический битовый набор с эффективным использованием памяти (специализация шаблона класса) |
|
| двусторонняя очередь (шаблон класса) |
|
| двусвязный список (шаблон класса) |
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/cpp/container/stack