std::queue::queue(3)
π std::queue::queue β C++ Standard Libary, section 3 π
Okay bestie, welcome to the std::queue::queue(3) page β weβre in the C++ Standard Libary (their spelling, not mine π
), section 3, and this is all about constructing a std::queue. Itβs giving βconstructor loreβ and honestly? Iconic. β¨
π NAME π
std::queue::queue - std::queue::queue
Yes, the NAME section is literally the constructor name echoing itself. Main character energy. We love a self-referential moment. π«Ά
πΈ Synopsis πΈ
Hereβs the synopsis exactly as printed; the alignment is doing a lot, but we respect it. π
queue() : queue(Container()) {} (1) (since C++11)
explicit queue( const Container& cont = Container()
(until C++11)
);
explicit queue( const Container& cont );
(since C++11)
explicit queue( Container&& cont ); (3)
(since C++11)
queue( const queue& other ); (4)
(implicitly declared)
(since C++11)
queue( queue&& other ); (5)
(implicitly declared)
template< class InputIt > (6)
(since C++23)
queue( InputIt first, InputIt last );
template< class Alloc > (7)
(since C++11)
explicit queue( const Alloc& alloc );
template< class Alloc > (8)
(since C++11)
queue( const Container& cont, const Alloc& alloc ); (2)
template< class Alloc > (9)
(since C++11)
queue( Container&& cont, const Alloc& alloc );
template< class Alloc > (10)
(since C++11)
queue( const queue& other, const Alloc& alloc );
template< class Alloc > (11)
(since C++11)
queue( queue&& other, const Alloc& alloc );
template< class InputIt, class Alloc >
queue( InputIt first, InputIt last, const Alloc& (12)
(since C++23)
alloc );
template< container-compatible-range<T> R> (13)
(since C++23)
queue( std::from_range_t, R&& rg );
template< container-compatible-range<T> R, class
Alloc > (14)
(since C++23)
queue( std::from_range_t, R&& rg, const Alloc&
alloc );
Okay so the big vibe: it constructs a new underlying container of the container adaptor from a variety of data sources. Hereβs the overload-by-overload tea:
- 1) Default constructor. Value-initializes the container.
- 2) Copy-constructs the underlying container
cwith the contents ofcont. This is also the default constructor. (until C++11) - 3) Move-constructs the underlying container
cwithstd::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
cwith the contents of the range[first, last). This overload participates in overload resolution only ifInputItsatisfiesLegacyInputIterator. - 7β12) These constructors participate in overload resolution only if
std::uses_allocator<Container, Alloc>::valueis true, that is, if the underlying container is an allocator-aware container (true for all standard library containers that can be used withqueue). - 7) Constructs the underlying container using
allocas allocator, as if byc(alloc). - 8) Constructs the underlying container with the contents of
contand usingallocas allocator, as if byc(cont, alloc). - 9) Constructs the underlying container with the contents of
contusing move semantics while utilizingallocas allocator, as if byc(std::move(cont), alloc). - 10) Constructs the adaptor with the contents of
other.cand usingallocas allocator, as if byc(other.c, alloc). - 11) Constructs the adaptor with the contents of
otherusing move semantics while utilizingallocas allocator, as if byc(std::move(other.c), alloc). - 12) Constructs the underlying container with the contents of the range
[first, last)usingallocas allocator, as if byc(first, last, alloc). This overload participates in overload resolution only ifInputItsatisfiesLegacyInputIterator. - 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β range of elements[first, last)to initialize with.rgβ a container compatible range, that is, aninput_rangewhose elements are convertible toT.
π¦ Type requirements π¦
Allocmust meet the requirements ofAllocator.Containermust meet the requirements ofContainer. The constructors taking an allocator parameter participate in overload resolution only ifContainermeets the requirements ofAllocatorAwareContainer.InputItmust meet the requirements ofLegacyInputIterator.
β Complexity β
Same as the corresponding operation on the wrapped container.
π Notes π
Feature-test macro tea, bestie:
__cpp_lib_adaptor_iterator_pair_constructorβ value202106L, standard(C++23). Feature: Iterator pair constructors forstd::queueandstd::stack; overloads(6)and(12).__cpp_lib_containers_rangesβ value202202L, standard(C++23). Feature: Ranges-aware construction and insertion; overloads(13)and(14).
π Example π
Run this code, bestie β itβs literally right there:
// Run this code
#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); // overload (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, overload (13)
auto c5 = 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)
auto c6 = std::ranges::iota(0, 42) | std::ranges::to<std::queue>();
assert(c6.size() == 42);
std::allocator<int> alloc;
// C++23, overload (14)
auto c7 = 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)
auto c8 = 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:
P0935R0β applied to C++11. Behavior as published: default constructor wasexplicit. Correct behavior: madeimplicit.
π See also π
operator=β assigns values to the container adaptor (public member function).
xoxo, your Unix bestie π
β source: http://cppreference.com, version/date 2024.06.10, page std::queue::queue(3). Periodt. π
π¦ where this page comes from
- nixpkgs unstable: stdman 2024.07.05
- opensuse-leap 16.0: stdman 2024.07.05-bp160.1.9 Β· MIT
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash-1017 on : a language model's rewrite of the original, under its terms