std::queue<T,Container>::queue - cppreference.com

queue():queue(Container()){} (1) (since C++11)explicitqueue(constContainer&cont=Container()); (2)(until C++11)explicitqueue(constContainer&cont);(since C++11)explicitqueue(Container&&cont); (3) (since C++11)queue(constqueue&other); (4) (implicitly declared)queue(queue&&other); (5) (since C++11)
(implicitly declared)template<classInputIt>queue(InputItfirst,InputItlast); (6)(since C++23)template<classAlloc>explicitqueue(constAlloc&alloc); (7) (since C++11)template<classAlloc>queue(constContainer&cont,constAlloc&alloc); (8) (since C++11)template<classAlloc>queue(Container&&cont,constAlloc&alloc); (9) (since C++11)template<classAlloc>queue(constqueue&other,constAlloc&alloc); (10) (since C++11)template<classAlloc>queue(queue&&other,constAlloc&alloc); (11) (since C++11)template<classInputIt,classAlloc>queue(InputItfirst,InputItlast,constAlloc&alloc); (12)(since C++23)template<container-compatible-range<T>R>queue(std::from_range_t,R&&rg); (13)(since C++23)template<container-compatible-range<T>R,classAlloc>queue(std::from_range_t,R&&rg,constAlloc&alloc); (14)(since C++23)Constructs new underlying container of the container adaptor from a variety of data sources.

1) Default constructor. Value-initializes the container.

2) Copy-constructs the underlying container c with the contents of cont. This is also the default constructor.(until C++11)

3) Move-constructs the underlying container c with std::move(cont).

4)

Copy constructor

. The adaptor is copy-constructed with the contents of other.c.

5)

Move constructor

. The adaptor is constructed with std::move(other.c).

6) Constructs the underlying container c with the contents of the range [first, last). This overload participates in overload resolution only if InputIt satisfies

LegacyInputIterator

.

7-12) These constructors participate in overload resolution only if std::uses_allocator<Container,Alloc>::value is true, that is, if the underlying container is an allocator-aware container (true for all standard library containers that can be used with queue).

7) Constructs the underlying container using alloc as allocator, as if by c(alloc).

8) Constructs the underlying container with the contents of cont and using alloc as allocator, as if by c(cont,alloc).

9) Constructs the underlying container with the contents of cont using move semantics while utilizing alloc as allocator, as if by c(std::move(cont),alloc).

10) Constructs the adaptor with the contents of other.c and using alloc as allocator, as if by c(other.c,alloc).

11) Constructs the adaptor with the contents of other using move semantics while utilizing alloc as allocator, as if by c(std::move(other.c),alloc).

12) Constructs the underlying container with the contents of the range [first, last) using alloc as allocator, as if by c(first,last,alloc). This overload participates in overload resolution only if InputIt satisfies

LegacyInputIterator

.

13) Constructs the underlying container with ranges::to<Container>(std::forward<R>(rg)).

14) Constructs the underlying container with ranges::to<Container>(std::forward<R>(rg),alloc).

Parameters

alloc - allocator to use for all memory allocations of the underlying container other - another container adaptor to be used as source to initialize the underlying container cont - container to be used as source to initialize the underlying container first, last - the pair of iterators defining the source

range

of elements to initialize with rg - a

container compatible range

, that is, an

input_range

whose elements are convertible to TType requirements -Alloc must meet the requirements of

Allocator

. -Container must meet the requirements of

Container

. The constructors taking an allocator parameter participate in overload resolution only if Container meets the requirements of

AllocatorAwareContainer

. -InputIt must meet the requirements of

LegacyInputIterator

. Complexity

Same as the corresponding operation on the wrapped container.

Notes

Feature-test

macro ValueStdFeature

__cpp_lib_adaptor_iterator_pair_constructor

202106L

(C++23)Iterator pair constructors for

std::queue

and

std::stack

; overloads (

6

) and (

12

)

__cpp_lib_containers_ranges

202202L

(C++23)

Ranges-aware

construction and insertion; overloads (

13

) and (

14

)Example

Run this code

#include<cassert>#include<deque>#include<iostream>#include<memory>#include<ranges>#include<queue>intmain(){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);// overload (2)assert(c3.size()==5);# ifdef __cpp_lib_adaptor_iterator_pair_constructorconstautoil={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, overload (13)autoc5=std::queue(std::from_range_t,std::ranges::iota(0,42));assert(c5.size()==42);// the same effect with pipe syntax, internally uses overload (13)autoc6=std::ranges::iota(0,42)|std::ranges::to<std::queue>();assert(c6.size()==42);std::allocator<int>alloc;// C++23, overload (14)autoc7=std::queue(std::from_range_t,std::ranges::iota(0,42),alloc);assert(c7.size()==42);// the same effect with pipe syntax, internally uses overload (14)autoc8=std::ranges::iota(0,42)|std::ranges::to<std::queue>(alloc);assert(c8.size()==42);# endif}Defect reports

The following behavior-changing defect reports were applied retroactively to previously published C++ standards.

DR Applied to Behavior as published Correct behavior

P0935R0

C++11 default constructor was explicit made implicit See also

assigns values to the container adaptor
(public member function)

[edit]