std::stack
Материал из cppreference.com
<tbody>
</tbody>
| Определено в заголовочном файле <stack>
|
||
template< class T, class Container = std::deque<T> > class stack; |
||
Класс std::stack это адаптер контейнера, предоставляющий программисту функциональные возможности стека, в частности, структуру данных LIFO (последним пришел, первым ушёл - last-in, first-out).
Шаблон класса выступает в качестве оболочки базового контейнера — предоставляется только определённый набор функций. Стек вталкивает и извлекает элемент из задней части базового контейнера, известного как вершина стека.
Параметры шаблона
| T | — | Тип хранимых элементов. Поведение неопределено, если T не того же типа, что и Container::value_type.
|
| Container | — | Тип базового контейнера, используемого для хранения элементов. Контейнер должен соответствовать требованиям SequenceContainer. Кроме того, он должен предоставлять следующие функции с ожидаемой семантикой:
Стандартные контейнеры std::vector, 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
|
Функции-элементы
создаёт stack (public функция-элемент) | |
уничтожает stack (public функция-элемент) | |
| присваивает значения адаптеру контейнера (public функция-элемент) | |
Доступ к элементам | |
| предоставляет доступ к элементу на вершине (public функция-элемент) | |
Ёмкость | |
| проверяет, пуст ли базовый контейнер (public функция-элемент) | |
| возвращает количество элементов (public функция-элемент) | |
Модификаторы | |
| вставляет элемент на вершину (public функция-элемент) | |
(C++23) |
вставляет диапазон элементов сверху (public функция-элемент) |
(C++11) |
создаёт элемент на месте сверху (public функция-элемент) |
| удаляет элемент с вершины (public функция-элемент) | |
(C++11) |
обменивает содержимое (public функция-элемент) |
Объекты элементы | |
Container c |
базовый контейнер (protected объект-элемент) |
Функции, не являющиеся элементами
| лексикографически сравнивает значения в stack (шаблон функции) | |
(C++11) |
специализация алгоритма std::swap (шаблон функции) |
Вспомогательные классы
| специализирует свойство типа std::uses_allocator (специализация шаблона класса) |
Принципы вывода |
(начиная с C++17) |
Примечание
| Макрос тест функциональности | Значение | Стандарт | Комментарий |
|---|---|---|---|
__cpp_lib_containers_ranges |
202202L |
(C++23) | Создание и вставка диапазонов для контейнеров |
Пример
| Этот раздел не завершён Причина: нет примера |
Отчёты о дефектах
Следующие изменения поведения были применены с обратной силой к ранее опубликованным стандартам C++:
| Номер | Применён | Поведение в стандарте | Корректное поведение |
|---|---|---|---|
| LWG 307 | C++98 | Container не может быть std::vector<bool>
|
позволено |
Смотрите также
| динамический непрерывный массив (шаблон класса) | |
| компактный динамический битовый набор (специализация шаблона класса) | |
| двусторонняя очередь (шаблон класса) | |
| двусвязный список (шаблон класса) |