std::queue
De cppreference.com
<tbody>
</tbody>
| Definido en el archivo de encabezado <queue>
|
||
template< class T, class Container = std::deque<T> > class queue; |
||
La plantilla de clase std::queue es un adaptador de contenedor que le da al programador la funcionalidad de una a cola. Específicamente, una estructura de datos FIFO (del acrónimo en inglés first-in, first-out) o PEPS (del acrónimo primeras entradas, primeras salidas).
La plantilla de clase actúa como envoltorio del contenedor subyacente; solo se proporciona un conjunto específico de funciones. La cola encola los elementos en la parte posterior del contenedor subyacente y los desencola desde el frente.
Parámetros de plantilla
| T | - | El tipo de los elementos almacenados. El comportamiento no está definido si T no es el mismo tipo que Container::value_type.
|
| Container | - | El tipo del contenedor subyacente a usar para almacenar los elementos. El contenedor debe satisfacer los requerimientos de ContenedorDeSecuencia. Además, debe proporcionar las siguientes funciones con la semántica habitual:
Los contenedores estándar std::deque y std::list cumplen con estos requisitos. |
Tipos miembro
| Tipo 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 de miembro | Definición |
Container c |
El contenedor subyacente. (objeto miembro protegido) |
Funciones miembro
Construye el contenedor queue. (función miembro pública) | |
Destruye el contenedor 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 contenedor subyacente está vacío. (función miembro pública) | |
| Devuelve el número de elementos. (función miembro pública) | |
Modificadores | |
| Encola un elemento al final de la cola. (función miembro pública) | |
(C++23) |
Inserta un rango de elementos al final de la cola. (función miembro pública) |
(C++11) |
Encola el elemento en el sitio al final de la cola. (función miembro pública) |
| Desencola el elemento al frente de la cola. (función miembro pública) | |
(C++11) |
Intercambia el contenido. (función miembro pública) |
Funciones no miembro
| Compara lexicográficamente los valores de queue. (plantilla de función) | |
(C++11) |
Especializa el algoritmo std::swap. (plantilla de función) |
Clases auxiliares
| Especializa el rasgo de tipo std::uses_allocator. (plantilla de función) | |
(C++23) |
Apoyo 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ística | Valor | Estándar | Comentario |
|---|---|---|---|
__cpp_lib_containers_ranges |
202202L |
(C++23) | Construcción de rangos e inserción para contenedores. |
Ejemplo
Ejecuta este código
#include <cassert>
#include <iostream>
#include <queue>
int main()
{
std::queue<int> q;
q.push(0); // encola 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(); // desencola el primer elemento, 0
assert(q.size() == 3);
// Imprime y elimina todos los elementos. Ten en cuenta que std::queue no
// admite begin()/end(), por lo que no se puede usar un bucle range-for.
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 de cambio de comportamiento se aplicaron de manera retroactiva a los estándares de C++ publicados anteriormente.
| ID | Aplicado a | Comportamiento según lo publicado | Comportamiento correcto |
|---|---|---|---|
| LWG 307 | C++98 | std::queue no admitía contenedores que usarantipos referencia a proxy[1] en lugar de ( const) value_type&
|
Se admiten. |
| LWG 2566 | C++98 | Faltaba el requisito de Container::value_type.
|
Mal formado si T no es el mismo tipo queContainer::value_type.
|
- ↑ Como contenedores similares a std::vector<bool> con compatibilidad adicional con
pop_front(). La resolución de este
informe de defecto agregó compatibilidad con std::vector<bool> para std::stack y std::priority_queue. Los cambios que involucran astd::queueson para mantener la consistencia.
Véase también
| Adapta un contenedor para proporcionar una cola de prioridad. (plantilla de clase) | |
Cola doblemente terminada (deque). (plantilla de clase) | |
| Lista doblemente enlazada. (plantilla de clase) |