std:: queue
|
Определено в заголовочном файле
<queue>
|
||
|
template
<
class
T,
|
||
Класс-шаблон
std::queue
является
адаптером контейнера
, который предоставляет функциональность
очереди
- а именно, структуры данных FIFO (первым пришел, первым ушел).
Шаблон класса действует как обёртка для базового контейнера - предоставляется только определённый набор функций. Очередь добавляет элементы в конец базового контейнера и извлекает их из начала.
Все функции-члены
std::queue
являются
constexpr
: возможно создавать и использовать объекты
std::queue
при вычислении константного выражения.
Однако, объекты
|
(начиная с C++26) |
Содержание |
Параметры шаблона
| T | - |
Тип хранимых элементов. Программа является некорректной, если
T
не совпадает с типом
Container::value_type
.
|
| Container | - |
Тип базового контейнера, используемого для хранения элементов. Контейнер должен удовлетворять требованиям
SequenceContainer
. Дополнительно он должен предоставлять следующие функции с
обычной семантикой
:
Стандартные контейнеры std::deque и std::list удовлетворяют этим требованиям. |
Типы членов
| Тип члена | Определение |
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)
|
обменивает содержимое
(публичная функция-член) |
Функции, не являющиеся членами класса
лексикографически сравнивает значения двух
queue
s
(шаблон функции) |
|
|
(C++11)
|
специализирует алгоритм
std::swap
(шаблон функции) |
Вспомогательные классы
|
(C++11)
|
специализирует
std::uses_allocator
type trait
(специализация шаблона класса) |
|
(C++23)
|
поддержка форматирования для
std::queue
(специализация шаблона класса) |
Deduction guides |
(since C++17) |
Примечания
| Макрос тестирования возможностей | Значение | Стандарт | Функция |
|---|---|---|---|
__cpp_lib_containers_ranges
|
202202L
|
(C++23) | Конструирование и вставка диапазонов для контейнеров |
__cpp_lib_constexpr_queue
|
202502L
|
(C++26) |
constexpr
std::queue
|
Пример
#include <cassert> #include <iostream> #include <queue> int main() { std::queue<int> q; q.push(0); // back добавляет 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(); // удаляет передний элемент, 0 assert(q.size() == 3); // Вывести и удалить все элементы. Обратите внимание, что std::queue // не поддерживает begin()/end(), поэтому цикл for по диапазону использовать нельзя. std::cout << "q: "; for (; !q.empty(); q.pop()) std::cout << q.front() << ' '; std::cout << '\n'; assert(q.size() == 0); }
Вывод:
q: 1 2 3
Отчеты о дефектах
Следующие отчеты об изменениях поведения, влияющие на дефекты, были применены ретроактивно к ранее опубликованным стандартам C++.
| DR | Применяется к | Поведение в опубликованной версии | Корректное поведение |
|---|---|---|---|
| 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(). Решение этого DR
добавило поддержку std::vector<bool> для std::stack и std::priority_queue . Изменения, касающиесяstd::queue
сделаны для сохранения согласованности.
Смотрите также
|
адаптирует контейнер для предоставления очереди с приоритетом
(шаблон класса) |
|
|
двусторонняя очередь
(шаблон класса) |
|
|
двусвязный список
(шаблон класса) |