template
<
class
T,
class
Container
=
std::
deque
<
T
>
>
class
queue
;
Класс-шаблон
std::queue
является
адаптером контейнера
, который предоставляет функциональность
очереди
- а именно, структуры данных FIFO (первым пришел, первым ушел).
Шаблон класса действует как обёртка для базового контейнера - предоставляется только определённый набор функций. Очередь добавляет элементы в конец базового контейнера и извлекает их из начала.
Все функции-члены
std::queue
являются
constexpr
: возможно создавать и использовать объекты
std::queue
при вычислении константного выражения.
Однако, объекты
std::queue
обычно не могут быть
constexpr
, поскольку любая динамически выделенная память должна быть освобождена в том же вычислении константного выражения.
(начиная с C++26)
Содержание
Параметры шаблона
T
-
Тип хранимых элементов. Программа является некорректной, если
T
не совпадает с типом
Container::value_type
.
Container
-
Тип базового контейнера, используемого для хранения элементов. Контейнер должен удовлетворять требованиям
SequenceContainer
. Дополнительно он должен предоставлять следующие функции с
обычной семантикой
:
back()
, например,
std::deque::back()
,
front()
, например,
std::list::front()
,
push_back()
, например,
std::deque::push_back()
,
pop_front()
, например,
std::list::pop_front()
.
Стандартные контейнеры
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
Объекты-члены
Член
Описание
базовый контейнер (защищённый объект-член)
Функции-члены
создает
queue
(публичная функция-член)
уничтожает
queue
(публичная функция-член)
присваивает значения адаптеру контейнера
(публичная функция-член)
Доступ к элементам
доступ к первому элементу
(публичная функция-член)
доступ к последнему элементу
(публичная функция-член)
Вместимость
проверяет, пуст ли адаптер контейнера
(публичная функция-член)
возвращает количество элементов
(публичная функция-член)
Модификаторы
вставляет элемент в конец
(публичная функция-член)
вставляет диапазон элементов в конец
(публичная функция-член)
создает элемент на месте в конце
(публичная функция-член)
удаляет первый элемент
(публичная функция-член)
обменивает содержимое
(публичная функция-член)
Функции, не являющиеся членами класса
лексикографически сравнивает значения двух
queue
s
(шаблон функции)
специализирует алгоритм
std::swap
(шаблон функции)
Вспомогательные классы
специализирует
std::uses_allocator
type trait
(специализация шаблона класса)
поддержка форматирования для
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 ) ;
}
Вывод:
Отчеты о дефектах
Следующие отчеты об изменениях поведения, влияющие на дефекты, были применены ретроактивно к ранее опубликованным стандартам 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
сделаны для сохранения согласованности.
Смотрите также
адаптирует контейнер для предоставления очереди с приоритетом
(шаблон класса)
двусторонняя очередь
(шаблон класса)
двусвязный список
(шаблон класса)