Clase queue
Una clase de adaptador de contenedor de plantilla que proporciona una restricción de la función de algunos tipos de contenedor subyacentes y que limita el acceso a los elementos frontal y trasero. Los elementos pueden agregarse en la parte trasera o quitarse de la parte delantera, y pueden inspeccionarse en cualquier extremo de queue
.
Sintaxis
template <class Type, class Container = deque <Type>>
class queue
Parámetros
Type
Tipo de datos de elementos que se va a almacenar en la queue
.
Container
Tipo del contenedor subyacente que se usa para implementar queue
.
Comentarios
Los elementos de la clase Type
estipulada en el primer parámetro de plantilla de un objeto queue
son sinónimos de value_type
y deben coincidir con el tipo de elemento de la clase de contenedor subyacente Container
estipulada por el segundo parámetro de plantilla. El Type
debe ser asignable, para que sea posible copiar objetos de ese tipo y asignar valores a variables de ese tipo.
Entre las clases de contenedor subyacente adecuadas para queue
se incluyen deque
y list
, o cualquier otro contenedor de secuencias que admita las operaciones de front
, back
, push_back
y pop_front
. La clase de contenedor subyacente se encapsula dentro del adaptador de contenedor, que solo expone el conjunto limitado de las funciones miembro de contenedor de secuencias como una interfaz pública.
Los objetos de queue
solo se pueden someter a una comparación de igualdad si los elementos de la clase Type
se pueden someter a una comparación de igualdad. Además, solo se pueden someter a una comparación de tipo menor-que si los elementos de la clase Type
se pueden someter a una comparación de tipo menor-que.
Existen tres tipos de adaptadores de contenedor que se definen mediante la biblioteca estándar de C++: stack
, queue
y priority_queue
. Cada uno restringe la función de alguna clase de contenedor subyacente para proporcionar una interfaz controlada de manera precisa para una estructura de datos estándar.
La clase
stack
es compatible con una estructura de datos LIFO (el último en entrar es el primero en salir). Un buen símil sería una pila de platos. Solo se pueden insertar e inspeccionar elementos (platos) en la parte superior de la pila, que es el último elemento al final del contenedor base, y solo se pueden quitar de ahí. La restricción de acceder únicamente al elemento superior es el motivo por el que se usa la clasestack
.La clase
queue
es compatible con una estructura de datos FIFO (el primero en entrar es el primero en salir). Un buen símil sería el de personas que hacen cola en un banco. Se pueden agregar elementos (personas) a la parte posterior de la línea y quitarlos de la parte delantera de la línea. Se puede inspeccionar tanto la parte delantera como trasera de una línea. La restricción de acceder únicamente a los elementosfront
yback
de esta manera es el motivo por el que se usa la clasequeue
.La clase
priority_queue
ordena sus elementos de tal modo que el elemento más grande siempre esté en la parte superior. Admite la inserción de un elemento y la inspección y eliminación del elemento superior. Un buen símil sería el de personas alineadas y organizadas por edad, altura o cualquier otro criterio.
Miembros
Constructores
Nombre | Descripción |
---|---|
queue |
Construye una queue que está vacía o que es una copia de un objeto contenedor base. |
Typedefs
Nombre | Descripción |
---|---|
container_type |
Un tipo que proporciona el contenedor base que debe adaptarse mediante queue . |
size_type |
Tipo entero sin signo que puede representar el número de elementos de un queue . |
value_type |
Tipo que representa el tipo de objeto almacenado como elemento en una queue . |
Funciones
Nombre | Descripción |
---|---|
back |
Devuelve una referencia al último elemento que se ha agregado más recientemente en la parte trasera de queue . |
empty |
Comprueba si la queue está vacía. |
front |
Devuelve una referencia al primer elemento en la parte delantera de queue . |
pop |
Quita un elemento de la parte delantera de queue . |
push |
Agrega un elemento a la parte trasera de queue . |
size |
Devuelve el número de elementos de queue . |
back
Devuelve una referencia al último elemento que se ha agregado más recientemente en la parte trasera de queue
.
reference back();
const_reference back() const;
Valor devuelto
El último elemento de queue
. Si queue
está vacío, el valor devuelto es indefinido.
Comentarios
Si el valor devuelto de back
se asigna a un const_reference
, el objeto queue
no puede modificarse. Si el valor devuelto de back
se asigna a un reference
, queue
sí se puede modificar.
Al compilar con _ITERATOR_DEBUG_LEVEL
definido como 1 o 2, se producirá un error en tiempo de ejecución si intenta obtener acceso a un elemento de una queue
vacía. Vea Iteradores comprobados para obtener más información.
Ejemplo
// queue_back.cpp
// compile with: /EHsc
#include <queue>
#include <iostream>
int main( )
{
using namespace std;
queue <int> q1;
q1.push( 10 );
q1.push( 11 );
int& i = q1.back( );
const int& ii = q1.front( );
cout << "The integer at the back of queue q1 is " << i
<< "." << endl;
cout << "The integer at the front of queue q1 is " << ii
<< "." << endl;
}
container_type
Un tipo que proporciona el contenedor base que debe adaptarse.
typedef Container container_type;
Comentarios
El tipo es un sinónimo del parámetro de plantilla Container
. Dos clases de contenedor de secuencias de la biblioteca estándar de C++ (la clase list
y la deque
predeterminada) cumplen los requisitos para usarse como el contenedor base para un objeto queue
. También pueden usarse tipos definidos por el usuario que cumplan los requisitos.
Para obtener más información sobre Container
, vea la sección Comentarios del tema queue Class
.
Ejemplo
Vea el ejemplo de queue
para obtener un ejemplo de cómo declarar y usar container_type
.
empty
Comprueba si un queue
está vacío.
bool empty() const;
Valor devuelto
true
si queue
está vacío; false
si queue
no está vacío.
Ejemplo
// queue_empty.cpp
// compile with: /EHsc
#include <queue>
#include <iostream>
int main( )
{
using namespace std;
// Declares queues with default deque base container
queue <int> q1, q2;
q1.push( 1 );
if ( q1.empty( ) )
cout << "The queue q1 is empty." << endl;
else
cout << "The queue q1 is not empty." << endl;
if ( q2.empty( ) )
cout << "The queue q2 is empty." << endl;
else
cout << "The queue q2 is not empty." << endl;
}
The queue q1 is not empty.
The queue q2 is empty.
front
Devuelve una referencia al primer elemento en la parte delantera de queue
.
reference front();
const_reference front() const;
Valor devuelto
El primer elemento de queue
. Si queue
está vacío, el valor devuelto es indefinido.
Comentarios
Si el valor devuelto de front
se asigna a un const_reference
, el objeto queue
no puede modificarse. Si el valor devuelto de front
se asigna a un reference
, queue
sí se puede modificar.
La función miembro devuelve una reference
al primer elemento de la secuencia controlada, que no debe estar vacío.
Al compilar con _ITERATOR_DEBUG_LEVEL
definido como 1 o 2, se producirá un error en tiempo de ejecución si intenta obtener acceso a un elemento de una queue
vacía. Vea Iteradores comprobados para obtener más información.
Ejemplo
// queue_front.cpp
// compile with: /EHsc
#include <queue>
#include <iostream>
int main() {
using namespace std;
queue <int> q1;
q1.push( 10 );
q1.push( 20 );
q1.push( 30 );
queue <int>::size_type i;
i = q1.size( );
cout << "The queue length is " << i << "." << endl;
int& ii = q1.back( );
int& iii = q1.front( );
cout << "The integer at the back of queue q1 is " << ii
<< "." << endl;
cout << "The integer at the front of queue q1 is " << iii
<< "." << endl;
}
pop
Quita un elemento de la parte delantera de queue
.
void pop();
Comentarios
queue
no debe estar vacía para aplicar la función miembro. La parte superior de queue
es la posición ocupada por el elemento agregado más recientemente y es el último elemento al final del contenedor.
Ejemplo
// queue_pop.cpp
// compile with: /EHsc
#include <queue>
#include <iostream>
int main( )
{
using namespace std;
queue <int> q1, s2;
q1.push( 10 );
q1.push( 20 );
q1.push( 30 );
queue <int>::size_type i;
i = q1.size( );
cout << "The queue length is " << i << "." << endl;
i = q1.front( );
cout << "The element at the front of the queue is "
<< i << "." << endl;
q1.pop( );
i = q1.size( );
cout << "After a pop the queue length is "
<< i << "." << endl;
i = q1. front ( );
cout << "After a pop, the element at the front of the queue is "
<< i << "." << endl;
}
The queue length is 3.
The element at the front of the queue is 10.
After a pop the queue length is 2.
After a pop, the element at the front of the queue is 20.
push
Agrega un elemento a la parte trasera de queue
.
void push(const Type& val);
Parámetros
val
El elemento que se ha agregado a la parte trasera de queue
.
Comentarios
La parte posterior de queue
es la posición ocupada por el elemento agregado más recientemente y es el último elemento al final del contenedor.
Ejemplo
// queue_push.cpp
// compile with: /EHsc
#include <queue>
#include <iostream>
int main( )
{
using namespace std;
queue <int> q1;
q1.push( 10 );
q1.push( 20 );
q1.push( 30 );
queue <int>::size_type i;
i = q1.size( );
cout << "The queue length is " << i << "." << endl;
i = q1.front( );
cout << "The element at the front of the queue is "
<< i << "." << endl;
}
The queue length is 3.
The element at the front of the queue is 10.
queue
Construye una queue
que está vacía o que es una copia de un objeto contenedor base.
queue();
explicit queue(const container_type& right);
Parámetros
right
El contenedor const
del que la queue
construida va a ser una copia.
Comentarios
El contenedor base predeterminado para queue
es deque
. También puede especificar list
como un contenedor base, pero no puede especificar vector
, porque le falta la función miembro pop_front
necesaria.
Ejemplo
// queue_queue.cpp
// compile with: /EHsc
#include <queue>
#include <vector>
#include <list>
#include <iostream>
int main( )
{
using namespace std;
// Declares queue with default deque base container
queue <char> q1;
// Explicitly declares a queue with deque base container
queue <char, deque<char> > q2;
// These lines don't cause an error, even though they
// declares a queue with a vector base container
queue <int, vector<int> > q3;
q3.push( 10 );
// but the following would cause an error because vector has
// no pop_front member function
// q3.pop( );
// Declares a queue with list base container
queue <int, list<int> > q4;
// The second member function copies elements from a container
list<int> li1;
li1.push_back( 1 );
li1.push_back( 2 );
queue <int, list<int> > q5( li1 );
cout << "The element at the front of queue q5 is "
<< q5.front( ) << "." << endl;
cout << "The element at the back of queue q5 is "
<< q5.back( ) << "." << endl;
}
The element at the front of queue q5 is 1.
The element at the back of queue q5 is 2.
size
Devuelve el número de elementos de queue
.
size_type size() const;
Valor devuelto
Longitud actual de queue
.
Ejemplo
// queue_size.cpp
// compile with: /EHsc
#include <queue>
#include <iostream>
int main( )
{
using namespace std;
queue <int> q1, q2;
queue <int>::size_type i;
q1.push( 1 );
i = q1.size( );
cout << "The queue length is " << i << "." << endl;
q1.push( 2 );
i = q1.size( );
cout << "The queue length is now " << i << "." << endl;
}
The queue length is 1.
The queue length is now 2.
size_type
Tipo entero sin signo que puede representar el número de elementos de un queue
.
typedef typename Container::size_type size_type;
Comentarios
El tipo es un sinónimo de size_type
del contenedor base adaptado por queue
.
Ejemplo
Vea el ejemplo de queue::front
para obtener un ejemplo de cómo declarar y usar size_type
.
value_type
Tipo que representa el tipo de objeto almacenado como elemento en una queue
.
typedef typename Container::value_type value_type;
Comentarios
El tipo es un sinónimo de value_type
del contenedor base adaptado por queue
.
Ejemplo
// queue_value_type.cpp
// compile with: /EHsc
#include <queue>
#include <iostream>
int main( )
{
using namespace std;
// Declares queues with default deque base container
queue<int>::value_type AnInt;
AnInt = 69;
cout << "The value_type is AnInt = " << AnInt << endl;
queue<int> q1;
q1.push(AnInt);
cout << "The element at the front of the queue is "
<< q1.front( ) << "." << endl;
}
The value_type is AnInt = 69
The element at the front of the queue is 69.
Vea también
Seguridad para subprocesos en la biblioteca estándar de C++
Referencia de biblioteca estándar de C++