std:: queue
Defined in header
<queue>
|
||
template
<
class
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.
Template parameters
T | - |
The type of the stored elements. The program is ill-formed if
T
is not the same type as
Container::value_type
.
|
Container | - |
The type of the underlying container to use to store the elements. The container must satisfy the requirements of
SequenceContainer
. Additionally, it must provide the following functions with the
usual semantics
:
The standard containers std::deque and std::list satisfy these requirements. |
Member types
Member type | Definition |
container_type
|
Container
|
value_type
|
Container::value_type
|
size_type
|
Container :: size_type |
reference
|
Container::reference
|
const_reference
|
Container::const_reference
|
Member objects
Member name | Definition |
Container
c
|
the underlying container
(protected member object) |
Member functions
constructs the
queue
(public member function) |
|
destructs the
queue
(public member function) |
|
assigns values to the container adaptor
(public member function) |
|
Element access |
|
access the first element
(public member function) |
|
access the last element
(public member function) |
|
Capacity |
|
checks whether the container adaptor is empty
(public member function) |
|
returns the number of elements
(public member function) |
|
Modifiers |
|
inserts element at the end
(public member function) |
|
(C++23)
|
inserts a range of elements at the end
(public member function) |
(C++11)
|
constructs element in-place at the end
(public member function) |
removes the first element
(public member function) |
|
(C++11)
|
swaps the contents
(public member function) |
Non-member functions
lexicographically compares the values of two
queue
s
(function template) |
|
(C++11)
|
specializes the
std::swap
algorithm
(function template) |
Helper classes
(C++11)
|
specializes the
std::uses_allocator
type trait
(class template specialization) |
(C++23)
|
formatting support for
std::queue
(class template specialization) |
Deduction guides |
(since C++17) |
Notes
Feature-test macro | Value | Std | Feature |
---|---|---|---|
__cpp_lib_containers_ranges
|
202202L | (C++23) | Ranges construction and insertion for containers |
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
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 proxy
reference 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.
See also
adapts a container to provide priority queue
(class template) |
|
double-ended queue
(class template) |
|
doubly-linked list
(class template) |