std:: stack
|
Определено в заголовочном файле
<stack>
|
||
|
template
<
class
T,
|
||
Класс
std::stack
является
адаптером контейнера
, который предоставляет программисту функциональность
стека
- а именно, структуры данных LIFO (последним пришел, первым ушел).
Класс-шаблон действует как обёртка для базового контейнера - предоставляется только определённый набор функций. Стек помещает и извлекает элементы с конца базового контейнера, что известно как вершина стека.
Все функции-члены
std::stack
являются
constexpr
: возможно создавать и использовать объекты
std::stack
при вычислении константного выражения.
Однако, объекты
|
(начиная с 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
ов
(шаблон функции) |
|
|
(C++11)
|
специализирует алгоритм
std::swap
(шаблон функции) |
Вспомогательные классы
|
(C++11)
|
специализирует
std::uses_allocator
type trait
(специализация шаблона класса) |
|
(C++23)
|
поддержка форматирования для
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
|
Смотрите также
|
изменяемый непрерывный массив
(шаблон класса) |
|
|
эффективное по памяти динамическое битовое множество
(специализация шаблона класса) |
|
|
двусторонняя очередь
(шаблон класса) |
|
|
двусвязный список
(шаблон класса) |