std::queue - cppreference.com

From cppreference.com

template<classT,classContainer=std::deque<T>>classqueue;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.

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

SequenceContainer

. Additionally, it must provide the following functions with the

usual semantics

: 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.

Member types

Member type Definition container_typeContainer

[edit]

value_typeContainer::value_type

[edit]

size_typeContainer::size_type

[edit]

referenceContainer::reference

[edit]

const_referenceContainer::const_reference

[edit]

Member objects

Member Description Container c

the underlying container
(protected member object)

[edit]

Member functions

(constructor)

constructs the queue
(public member function)

[edit]

(destructor)

destructs the queue
(public member function)

[edit]

operator=

assigns values to the container adaptor
(public member function)

[edit]

Element access

front

access the first element
(public member function)

[edit]

back

access the last element
(public member function)

[edit]

Capacity

empty

checks whether the container adaptor is empty
(public member function)

[edit]

size

returns the number of elements
(public member function)

[edit]

Modifiers

push

inserts element at the end
(public member function)

[edit]

push_range

(C++23)

inserts a range of elements at the end
(public member function)

[edit]

emplace

(C++11)

constructs element in-place at the end
(public member function)

[edit]

pop

removes the first element
(public member function)

[edit]

swap

(C++11)

swaps the contents
(public member function)

[edit]

Non-member functions

Helper classes

Notes

Feature-test

macro ValueStdFeature

__cpp_lib_containers_ranges

202202L

(C++23)Ranges construction and insertion for containers

__cpp_lib_constexpr_queue

202502L

(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

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_typeill-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 involving std::queue
are for maintaining consistency.

See also