Namespaces
Variants

std::queue<T,Container>::queue

Из ru.cppreference.net

 
 
 
 
queue() : queue(Container()) {}
(1) (начиная с C++11)
explicit queue( const Container& cont = Container() );
(2) (до C++11)
explicit queue( const Container& cont );
(начиная с C++11)
explicit queue( Container&& cont );
(3) (начиная с C++11)
queue( const queue& other );
(4) (неявно объявленный)
queue( queue&& other );
(5) (начиная с C++11)
(неявно объявленный)
template< class InputIt >
queue( InputIt first, InputIt last );
(6) (начиная с C++23)
template< class Alloc >
explicit queue( const Alloc& alloc );
(7) (начиная с C++11)
template< class Alloc >
queue( const Container& cont, const Alloc& alloc );
(8) (начиная с C++11)
template< class Alloc >
queue( Container&& cont, const Alloc& alloc );
(9) (начиная с C++11)
template< class Alloc >
queue( const queue& other, const Alloc& alloc );
(10) (начиная с C++11)
template< class Alloc >
queue( queue&& other, const Alloc& alloc );
(11) (начиная с C++11)
template< class InputIt, class Alloc >
queue( InputIt first, InputIt last, const Alloc& alloc );
(12) (начиная с C++23)
template< container-compatible-range<T> R>
queue( std::from_range_t, R&& rg );
(13) (начиная с C++23)
template< container-compatible-range<T> R, class Alloc >
queue( std::from_range_t, R&& rg, const Alloc& alloc );
(14) (начиная с C++23)

Конструирует новый базовый контейнер адаптера из различных источников данных.

1) Конструктор по умолчанию. Выполняет value-инициализацию контейнера.
2) Копирует базовый контейнер c из содержимого cont. Это также конструктор по умолчанию.(до C++11)
3) Перемещает базовый контейнер c из std::move(cont).
4) Конструктор копирования. Адаптер конструируется копированием из содержимого other.c.
5) Конструктор перемещения. Адаптер конструируется из std::move(other.c).
6) Конструирует базовый контейнер c из содержимого диапазона [first, last). Эта перегрузка участвует в разрешении перегрузки только если InputIt удовлетворяет LegacyInputIterator.
7-12) Эти конструкторы участвуют в разрешении перегрузки только если std::uses_allocator<Container, Alloc>::value является true, то есть если базовый контейнер поддерживает аллокаторы (верно для всех стандартных контейнеров, которые могут использоваться с queue).
7) Конструирует базовый контейнер с использованием alloc в качестве аллокатора, как если бы через c(alloc).
8) Конструирует базовый контейнер с содержимым cont и с использованием alloc в качестве аллокатора, как если бы через c(cont, alloc).
9) Конструирует базовый контейнер с содержимым cont с использованием семантики перемещения и с использованием alloc в качестве аллокатора, как если бы через c(std::move(cont), alloc).
10) Конструирует адаптер с содержимым other.c и с использованием alloc в качестве аллокатора, как если бы через c(other.c, alloc).
11) Конструирует адаптер с содержимым other с использованием семантики перемещения и с использованием alloc в качестве аллокатора, как если бы через c(std::move(other.c), alloc).
12) Конструирует базовый контейнер с содержимым диапазона [first, last) с использованием alloc в качестве аллокатора, как если бы через c(first, last, alloc). Эта перегрузка участвует в разрешении перегрузки только если InputIt удовлетворяет LegacyInputIterator.
13) Конструирует базовый контейнер с помощью ranges::to<Container>(std::forward<R>(rg)).
14) Конструирует базовый контейнер с помощью ranges::to<Container>(std::forward<R>(rg), alloc).

Параметры

alloc - аллокатор для использования во всех выделениях памяти базового контейнера
other - другой адаптер контейнера, используемый как источник для инициализации базового контейнера
cont - контейнер, используемый как источник для инициализации базового контейнера
first, last - пара итераторов, определяющая исходный диапазон элементов для инициализации
rg - контейнерно-совместимый диапазон , то есть input_range , элементы которого конвертируемы в T
Требования к типам
-
Alloc должен удовлетворять требованиям Allocator .
-
Container должен удовлетворять требованиям Container . Конструкторы, принимающие параметр аллокатора, участвуют в разрешении перегрузки только если Container удовлетворяет требованиям AllocatorAwareContainer .
-
InputIt должен удовлетворять требованиям LegacyInputIterator .

Сложность

То же, что и соответствующая операция для обёрнутого контейнера.

Примечания

Макрос тестирования возможностей Значение Стандарт Возможность
__cpp_lib_adaptor_iterator_pair_constructor 202106L (C++23) Конструкторы с парой итераторов для std::queue и std::stack ; перегрузки ( 6 ) и ( 12 )
__cpp_lib_containers_ranges 202202L (C++23) Основанные на диапазонах конструкция и вставка; перегрузки ( 13 ) и ( 14 )

Пример

#include <cassert>
#include <deque>
#include <iostream>
#include <memory>
#include <ranges>
#include <queue>
int main()
{
    std::queue<int> c1;
    c1.push(5);
    assert(c1.size() == 1);
    std::queue<int> c2(c1);
    assert(c2.size() == 1);
    std::deque<int> deq{3, 1, 4, 1, 5};
    std::queue<int> c3(deq); // перегрузка (2)
    assert(c3.size() == 5);
# ifdef __cpp_lib_adaptor_iterator_pair_constructor
    const auto il = {2, 7, 1, 8, 2};
    std::queue<int> c4{il.begin(), il.end()}; // C++23, (6)
    assert(c4.size() == 5);
# endif
# if __cpp_lib_containers_ranges >= 202202L
    // C++23, перегрузка (13)
    auto c5 = std::queue(std::from_range_t, std::ranges::iota(0, 42));
    assert(c5.size() == 42);
    // тот же эффект с использованием синтаксиса конвейера, внутренне использует перегрузку (13)
    auto c6 = std::ranges::iota(0, 42) | std::ranges::to<std::queue>();
    assert(c6.size() == 42);
    std::allocator<int> alloc;
    // C++23, перегрузка (14)
    auto c7 = std::queue(std::from_range_t, std::ranges::iota(0, 42), alloc);
    assert(c7.size() == 42);
    // тот же эффект с использованием синтаксиса конвейера, внутренне использует перегрузку (14)
    auto c8 = std::ranges::iota(0, 42) | std::ranges::to<std::queue>(alloc);
    assert(c8.size() == 42);
# endif
}

Отчеты о дефектах

Следующие отчеты об изменениях поведения, влияющие на дефекты, были применены ретроактивно к ранее опубликованным стандартам C++.

DR Applied to Behavior as published Correct behavior
P0935R0 C++11 default constructor was explicit made implicit

Смотрите также

присваивает значения адаптеру контейнера
(public member function)