From cppreference.com
template<classT,classContainer=std::deque<T>>classqueue;The std::queue class template is a
that gives the functionality of a
- 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.
All member functions of std::queue are constexpr: it is possible to create and use std::queue objects in the evaluation of a constant expression.
However, defining a constexprstd::queue variable is generally an error, because constant evaluation requires any dynamically allocated storage to be released in the same evaluation, which is usually not the case with std::queue's initializer.
(since C++26)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
. Additionally, it must provide the following functions with the
: back(), e.g.,
,
front(), e.g.
,
push_back(), e.g.,
,
pop_front(), e.g.,
.
The standard containers
and
satisfy these requirements.
Member types
Member type Definition container_typeContainer
value_typeContainer::value_type
size_typeContainer::size_type
referenceContainer::reference
const_referenceContainer::const_reference
Member objects
Member Description 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
Helper classes
Notes
macro ValueStdFeature
(C++23)Ranges construction and insertion for containers
(C++26)Constexpr std::queueExample
Run this code
#include<cassert>#include<iostream>#include<queue>intmain(){std::queue<int>q;q.push(0);// back pushes 0q.push(1);// q = 0 1q.push(2);// q = 0 1 2q.push(3);// q = 0 1 2 3assert(q.front()==0);assert(q.back()==3);assert(q.size()==4);q.pop();// removes the front element, 0assert(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
C++98 std::queue did not support containers using proxy
reference types
in place of (const) value_type&supported
C++98 Missing the requirement for Container::value_typeill-formed if T is not the same type as Container::value_type
Such as containers similar to
with additional support of pop_front(). The resolution of this DR
added support of
for
and
. The changes involving std::queue
are for maintaining consistency.
See also