Utilice el contenedor de cola STL en C++
-
Utilice
std::queue
para declarar un objeto de cola STL en C++ -
Utilice la función miembro
size
para recuperar el tamaño de la cola en C++ -
Utilice la función de miembro
swap
para intercambiar contenido de dos objetos de cola en C++
Este artículo explica cómo utilizar el contenedor de cola STL en C++.
Utilice std::queue
para declarar un objeto de cola STL en C++
La biblioteca estándar de C++ proporciona varias clases de contenedor que se utilizan para proporcionar tipos fundamentales para administrar colecciones de objetos. Sin embargo, existen algunos contenedores especiales llamados adaptadores de contenedores
, que transforman contenedores fundamentales para necesidades especiales con la interfaz más restringida.
Uno de estos adaptadores de contenedor es std::queue
, que adapta los contenedores de secuencia para proporcionar una estructura de datos FIFO (primero en entrar, primero en salir). Tenga en cuenta que el contenedor fundamental subyacente debe implementar los requisitos de SequenceContainer
y tener cuatro funciones miembro: back
, front
, push_back
y pop_front
. Sólo las funciones std::deque
y std::list
de los contenedores fundamentales satisfacen los requisitos anteriores y, por lo tanto, se pueden utilizar para almacenar elementos de queue
.
#include <iostream>
#include <queue>
using std::cout;
using std::endl;
using std::queue;
using std::string;
template <typename Queue>
void printQueue(Queue q) {
while (!q.empty()) {
cout << q.front() << ", ";
q.pop();
}
cout << endl;
}
int main() {
std::queue<string> q1;
std::deque<string> deq1 = {"one", "eight", "six", "seven", "eleven", "ten"};
for (const auto& n : deq1) q1.push(n);
printQueue(q1);
std::queue<string> q2(deq1);
printQueue(q2);
return EXIT_SUCCESS;
}
Producción :
one, eight, six, seven, eleven, ten,
one, eight, six, seven, eleven, ten,
El contenedor std::queue
se puede inicializar utilizando el objeto std::deque
existente. El constructor para la última inicialización solo necesita un argumento de tipo deque
. Por otro lado, podemos declarar un objeto de cola y agregar elementos usando la función push
. En el fragmento de código anterior, demostramos los métodos anteriores e imprimimos el contenido de las colas usando la función printQueue
.
Observe que la iteración sobre los elementos de la cola se realiza con el bucle while
utilizando la función empty
porque los iteradores no son accesibles. En cada bucle de bucle, accedemos al primer elemento usando la función miembro front
y usamos pop
para eliminar el mismo elemento. Dado que la última operación modifica el objeto de cola original, lo aceptamos como el argumento de valor en lugar de la referencia.
Utilice la función miembro size
para recuperar el tamaño de la cola en C++
Puede utilizar la función de miembro size
para recuperar el número de elementos en el objeto de cola. La función tiene un desempeño de tiempo constante.
#include <iostream>
#include <queue>
using std::cout;
using std::endl;
using std::queue;
using std::string;
int main() {
std::deque<string> deq1 = {"one", "eight", "six", "seven", "eleven", "ten"};
std::queue<string> q2(deq1);
cout << "size of the queue = " << q2.size() << endl;
return EXIT_SUCCESS;
}
Producción :
size of the queue = 6
Utilice la función de miembro swap
para intercambiar contenido de dos objetos de cola en C++
Podemos intercambiar los elementos de dos objetos de cola usando la función de miembro swap
. Toma otro objeto de cola como único argumento e intercambia su contenido con el objeto de llamada. Tenga en cuenta que el objeto de argumento asignó el contenido de la cola de llamadas.
#include <iostream>
#include <queue>
using std::cout;
using std::endl;
using std::queue;
using std::string;
template <typename Queue>
void printQueue(Queue q) {
while (!q.empty()) {
cout << q.front() << ", ";
q.pop();
}
cout << endl;
}
int main() {
std::queue<string> q1;
std::deque<string> deq1 = {"one", "eight", "six", "seven", "eleven", "ten"};
for (const auto& n : deq1) q1.push(n);
std::queue<string> q2(deq1);
q2.push(deq1.front());
q2.push("zero");
cout << "q1: ";
printQueue(q1);
cout << "q2: ";
printQueue(q2);
q1.swap(q2);
cout << "q1: ";
printQueue(q1);
cout << "q2: ";
printQueue(q2);
return EXIT_SUCCESS;
}
Producción :
q1: one, eight, six, seven, eleven, ten,
q2: one, eight, six, seven, eleven, ten, one, zero,
q1: one, eight, six, seven, eleven, ten, one, zero,
q2: one, eight, six, seven, eleven, ten,
Founder of DelftStack.com. Jinku has worked in the robotics and automotive industries for over 8 years. He sharpened his coding skills when he needed to do the automatic testing, data collection from remote servers and report creation from the endurance test. He is from an electrical/electronics engineering background but has expanded his interest to embedded electronics, embedded programming and front-/back-end programming.
LinkedIn Facebook