std::stack
Определено в заголовочном файле <stack> | ||
template< class T, | ||
Класс 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> | позволено |
[править]Смотрите также
динамический непрерывный массив (шаблон класса) | |
компактный динамический битовый набор (специализация шаблона класса) | |
двусторонняя очередь (шаблон класса) | |
двусвязный список (шаблон класса) |