std::queue
std::queue
<queue>
class T,
class Container = std::deque <T>
The std::queue
class template is a container adaptor that gives the functionality of a queue - specifically, a FIFO (first-in, first-out) data structure.
The class template acts as a wrapper to the underlying container - only a specific set of functions is provided. The queue pushes the elements on the back of the underlying container and pops them from the front.
std::queue
are constexpr: it is possible to create and use std::queue
objects in the evaluation of a constant expression.However, std::queue
objects generally cannot be constexpr, because any dynamically allocated storage must be released in the same evaluation of constant expression.
Contents
[edit] Template parameters
T
is not the same type as Container::value_type
.
-
back()
, e.g., std::deque::back() , -
front()
, e.g. std::list::front() , -
push_back()
, e.g., std::deque::push_back() , -
pop_front()
, e.g., std::list::pop_front() .
The standard containers std::deque and std::list satisfy these requirements.
[edit] Member types
[edit] Member objects
[edit] Member functions
Element access
Capacity
Modifiers
[edit] Non-member functions
[edit] Helper classes
Deduction guides
(since C++17)[edit] Notes
Feature-test macro | Value | Std | Feature |
---|---|---|---|
__cpp_lib_containers_ranges |
202202L |
(C++23) | Ranges construction and insertion for containers |
__cpp_lib_constexpr_queue |
202502L |
(C++26) | constexpr std::queue
|
[edit] Example
#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); }
Output:
q: 1 2 3
[edit] Defect reports
The following behavior-changing defect reports were applied retroactively to previously published C++ standards.
DR | Applied to | Behavior as published | Correct behavior |
---|---|---|---|
LWG 307 | C++98 | std::queue did not support containers using proxyreference types[1] in place of ( const ) value_type&
|
supported |
LWG 2566 | C++98 | Missing the requirement for Container::value_type
|
ill-formed if T is not the same type as Container::value_type
|
- ↑ Such as containers similar to std::vector<bool> with additional support of
pop_front()
. The resolution of this DR
added support of std::vector<bool> for std::stack and std::priority_queue . The changes involvingstd::queue
are for maintaining consistency.