Namespaces
Variants

std:: queue

From cppreference.net
Definido en el encabezado <queue>
template <

class T,
class Container = std:: deque < T >

> class queue ;

La std::queue es una adaptadora de contenedor que proporciona la funcionalidad de una cola - específicamente, una estructura de datos FIFO (primero en entrar, primero en salir).

La plantilla de clase actúa como un contenedor para el contenedor subyacente - solo se proporciona un conjunto específico de funciones. La queue inserta los elementos en la parte posterior del contenedor subyacente y los extrae del frente.

Todas las funciones miembro de std::queue son constexpr : es posible crear y utilizar objetos std::queue en la evaluación de una expresión constante.

Sin embargo, los objetos std::queue generalmente no pueden ser constexpr , porque cualquier almacenamiento asignado dinámicamente debe liberarse en la misma evaluación de la expresión constante.

(since C++26)

Contenidos

Parámetros de plantilla

T - El tipo de los elementos almacenados. El programa está mal formado si T no es del mismo tipo que Container::value_type .
Container - El tipo del contenedor subyacente utilizado para almacenar los elementos. El contenedor debe satisfacer los requisitos de SequenceContainer . Adicionalmente, debe proporcionar las siguientes funciones con la semántica usual :

Los contenedores estándar std::deque y std::list satisfacen estos requisitos.

Tipos de miembros

Tipo de miembro Definición
container_type Container
value_type Container::value_type
size_type Container :: size_type
reference Container::reference
const_reference Container::const_reference

Objetos miembro

Nombre del miembro Definición
Container c
el contenedor subyacente
(objeto miembro protegido)

Funciones miembro

construye el queue
(función miembro pública)
destruye el queue
(función miembro pública)
asigna valores al adaptador de contenedor
(función miembro pública)
Acceso a elementos
accede al primer elemento
(función miembro pública)
accede al último elemento
(función miembro pública)
Capacidad
comprueba si el adaptador de contenedor está vacío
(función miembro pública)
devuelve el número de elementos
(función miembro pública)
Modificadores
inserta elemento al final
(función miembro pública)
(C++23)
inserta un rango de elementos al final
(función miembro pública)
(C++11)
construye elemento en el lugar al final
(función miembro pública)
elimina el primer elemento
(función miembro pública)
(C++11)
intercambia el contenido
(función miembro pública)

Funciones no miembro

compara lexicográficamente los valores de dos queue s
(plantilla de función)
especializa el algoritmo std::swap
(plantilla de función)

Clases auxiliares

especializa el rasgo de tipo std::uses_allocator
(especialización de plantilla de clase)
soporte de formato para std::queue
(especialización de plantilla de clase)

Guías de deducción

(desde C++17)

Notas

Macro de prueba de características Valor Std Característica
__cpp_lib_containers_ranges 202202L (C++23) Construcción e inserción de rangos para contenedores
__cpp_lib_constexpr_queue 202502L (C++26) constexpr std::queue

Ejemplo

#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);
}

Salida:

q: 1 2 3

Informes de defectos

Los siguientes informes de defectos que modifican el comportamiento se aplicaron retroactivamente a los estándares de C++ publicados anteriormente.

DR Aplicado a Comportamiento publicado Comportamiento correcto
LWG 307 C++98 std::queue no admitía contenedores que usaban tipos de
referencia proxy [1] en lugar de ( const ) value_type&
admitido
LWG 2566 C++98 Faltaba el requisito para Container::value_type mal formado si T no es del mismo tipo que Container::value_type
  1. Como contenedores similares a std::vector<bool> con soporte adicional de pop_front() . La resolución de este DR
    añadió soporte de std::vector<bool> para std::stack y std::priority_queue . Los cambios relacionados con std::queue
    son para mantener la consistencia.

Véase también

adapta un contenedor para proporcionar cola de prioridad
(class template)
cola de doble extremo
(class template)
lista doblemente enlazada
(class template)