std::queue
Defined in header <queue> |
||
|---|---|---|
template<
class T,
class Container = std::deque<T>
> class queue;
|
Класс std::queue — это адаптер контейнера, предоставляющий функциональность очереди — конкретно, структуры данных FIFO (первым вошел, первым вышел).
Шаблон класса выступает в качестве оболочки для базового контейнера, предоставляя только определённый набор функций. Очередь добавляет элементы в конец базового контейнера и извлекает их из начала.
Параметры шаблона
| 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 |
базовый контейнер (защищённый объект-член) |
Члены-функции
| создание очереди (публичная функция-член) |
|
| удаление очереди (публичная функция-член) |
|
| присваивание значений адаптеру контейнера (публичная функция-член) |
|
Доступ к элементам |
|
| доступ к первому элементу (публичная функция-член) |
|
| доступ к последнему элементу (публичная функция-член) |
|
Объём |
|
| проверка пустоты адаптера контейнера (публичная функция-член) |
|
| возвращает количество элементов (публичная функция-член) |
|
Модификаторы |
|
| вставка элемента в конец (публичная функция-член) |
|
|
(C++23) |
вставка диапазона элементов в конец (публичная функция-член) |
|
(C++11) |
создание элемента на месте в конце (публичная функция-член) |
| удаление первого элемента (публичная функция-член) |
|
|
(C++11) |
обмен содержимым (публичная функция-член) |
Внешние функции
|
(C++20) |
лексикографическое сравнение значений двух очередей (шаблон функции) |
|
(C++11) |
специализация алгоритма std::swap (шаблон функции) |
Вспомогательные классы
|
(C++11) |
специализация типа-трейта std::uses_allocator (специализация шаблона класса) |
Руководства по выводу |
(с C++17) |
Примечания
| Макрокоманда проверки наличия функции | Значение | Std | Функция |
|---|---|---|---|
__cpp_lib_containers_ranges |
202202L | (C++23) | Создание и вставка диапазонов для контейнеров |
Пример
#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++.
| DR | Применён к | Поведение, как опубликовано | Правильное поведение |
|---|---|---|---|
| LWG 307 | C++98 |
std::queue не поддерживал контейнеры, использующие типы прокси-ссылок вместо ( const) value_type& |
поддерживается |
-
Например, контейнеры, подобные
std::vector<bool>с дополнительной поддержкойpop_front(). Решение этой DR добавило поддержку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/w/cpp/container/queue