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