std::queue
Определён в заголовочном файле <queue> | ||
|---|---|---|
template<
class T,
class Container = std::deque<T>
> class queue;
|
Шаблон класса std::queue — это адаптер контейнера, предоставляющий функциональность очереди, а именно структуры данных FIFO (первым пришёл — первым вышел).
Шаблон класса служит оболочкой для базового контейнера — предоставляется только определённый набор функций. Очередь помещает элементы в конец базового контейнера и извлекает их из начала.
| Все функции-члены Однако объявление переменной | (начиная с 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 | базовый контейнер (защищённый объект-член) |
Функции-члены
создаёт queue (открытая функция-член) |
|
уничтожает queue (открытая функция-член) |
|
| присваивает значения адаптеру контейнера (открытая функция-член) |
|
Доступ к элементам |
|
| доступ к первому элементу (открытая функция-член) |
|
| доступ к последнему элементу (открытая функция-член) |
|
Ёмкость |
|
| проверяет, пуст ли адаптер контейнера (открытая функция-член) |
|
| возвращает количество элементов (открытая функция-член) |
|
Модификаторы |
|
| вставляет элемент в конец (открытая функция-член) |
|
|
(C++23) | вставляет диапазон элементов в конец (открытая функция-член) |
|
(C++11) | создаёт элемент непосредственно в конце (открытая функция-член) |
| удаляет первый элемент (открытая функция-член) |
|
|
(C++11) | меняет содержимое местами (открытая функция-член) |
Функции, не являющиеся членами
|
(C++20) | лексикографически сравнивает значения двух объектов queue (шаблон функции) |
|
(C++11) | специализирует алгоритм std::swap (шаблон функции) |
Вспомогательные классы
|
(C++11) | специализирует характеристику типа std::uses_allocator (специализация шаблона класса) |
|
(C++23) | поддержка форматирования для std::queue (специализация шаблона класса) |
Руководства по выведению типов | (начиная с C++17) |
Примечания
| Макрос проверки поддержки возможностей | Значение | Стандарт | Возможность |
|---|---|---|---|
__cpp_lib_containers_ranges | 202202L | (C++23) | Создание и вставка в контейнеры с использованием диапазонов |
__cpp_lib_constexpr_queue | 202502L | (C++26) | Константное вычисление для std::queue |
Пример
#include <cassert>
#include <iostream>
#include <queue>
int main()
{
std::queue<int> q;
q.push(0); // back pushes 0
q.push(1); // q = 0 1
q.push(2); // q = 0 1 2
q.push(3); // q = 0 1 2 3
assert(q.front() == 0);
assert(q.back() == 3);
assert(q.size() == 4);
q.pop(); // removes the front element, 0
assert(q.size() == 3);
// Print and remove all elements. Note that std::queue does not
// support begin()/end(), so a range-for-loop cannot be used.
std::cout << "q: ";
for (; !q.empty(); q.pop())
std::cout << q.front() << ' ';
std::cout << '\n';
assert(q.size() == 0);
}
Вывод:
q: 1 2 3
Отчёты об ошибках
Следующие отчёты об ошибках, изменяющие поведение, были применены задним числом к ранее опубликованным стандартам C++.
| Отчёт об ошибке | Применён к | Опубликованное поведение | Корректное поведение |
|---|---|---|---|
| LWG 307 | C++98 |
std::queue не поддерживал контейнеры, использующие прокси-типыссылок[1] вместо ( const) value_type& | поддерживаются |
| LWG 2566 | C++98 | Отсутствовало требование к Container::value_type | программа некорректна, если T не совпадает по типу с Container::value_type |
- Например, контейнеры, подобные
std::vector<bool>, с дополнительной поддержкойpop_front(). Решение этого отчёта об ошибке
добавило поддержкуstd::vector<bool>дляstd::stackиstd::priority_queue. Изменения, связанные сstd::queue,
внесены для обеспечения согласованности.
См. также
| адаптирует контейнер для предоставления очереди с приоритетами (шаблон класса) |
|
| двусторонняя очередь (шаблон класса) |
|
| двусвязный список (шаблон класса) |
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/cpp/container/queue