Spec-Zone.ru › C++

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. Кроме того, он должен предоставлять следующие функции со стандартной семантикой:
  • back()
  • front()
  • push_back()
  • 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

Объекты-члены

Имя члена Определение
Container c
базовый контейнер
(защищённый объект-член)

Члены-функции

(конструктор)
создание очереди
(публичная функция-член)
(деструктор)
удаление очереди
(публичная функция-член)
operator=
присваивание значений адаптеру контейнера
(публичная функция-член)
Доступ к элементам
front
доступ к первому элементу
(публичная функция-член)
back
доступ к последнему элементу
(публичная функция-член)
Объём
empty
проверка пустоты адаптера контейнера
(публичная функция-член)
size
возвращает количество элементов
(публичная функция-член)
Модификаторы
push
вставка элемента в конец
(публичная функция-член)
push_range
(C++23)
вставка диапазона элементов в конец
(публичная функция-член)
emplace
(C++11)
создание элемента на месте в конце
(публичная функция-член)
pop
удаление первого элемента
(публичная функция-член)
swap
(C++11)
обмен содержимым
(публичная функция-член)

Внешние функции

operator==operator!=operator<operator<=operator>operator>=operator<=>
(C++20)
лексикографическое сравнение значений двух очередей
(шаблон функции)
std::swap(std::queue)
(C++11)
специализация алгоритма std::swap
(шаблон функции)

Вспомогательные классы

std::uses_allocator<std::queue>
(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&
поддерживается
  1. Например, контейнеры, подобные std::vector<bool> с дополнительной поддержкой pop_front(). Решение этой DR добавило поддержку std::vector<bool> для std::stack и std::priority_queue. Изменения, связанные с std::queue, предназначены для поддержания согласованности.

См. также

deque
двусторонняя очередь
(шаблон класса)
list
двусвязный список
(шаблон класса)

© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/w/cpp/container/queue

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API