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 clase stack.

  • 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 elementos front y back de esta manera es el motivo por el que se usa la clase queue.

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

Functions

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.

Consulte también

Seguridad para subprocesos en la biblioteca estándar de C++
Referencia de biblioteca estándar de C++