Use o contêiner de fila STL em C++
-
Use
std::queue
para declarar um objeto STL Queue em C++ -
Use a função de membro
size
para recuperar o tamanho da fila em C++ -
Use a função de membro
swap
para trocar o conteúdo de dois objetos de fila em C++
Este artigo explica como utilizar o contêiner de fila STL em C++.
Use std::queue
para declarar um objeto STL Queue em C++
A biblioteca padrão C++ fornece várias classes de contêiner usadas para fornecer tipos fundamentais para o gerenciamento de coleções de objetos. Porém, existem alguns contêineres especiais chamados adaptadores de contêiner
, que transformam contêineres fundamentais para necessidades especiais com a interface mais restrita.
Um desses adaptadores de contêiner é std::queue
, que adapta contêineres de sequência para fornecer uma estrutura de dados FIFO (first-in-first-out). Observe que o contêiner fundamental subjacente deve implementar os requisitos SequenceContainer
e ter quatro funções de membro: back
, front
, push_back
e pop_front
. Apenas as funções std::deque
e std::list
dos contêineres fundamentais satisfazem os requisitos acima e, portanto, podem ser usadas para armazenar 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;
}
Resultado:
one, eight, six, seven, eleven, ten, one, eight, six, seven, eleven, ten,
O contêiner std::queue
pode ser inicializado usando o objeto std::deque
existente. O construtor para a última inicialização só precisa de um argumento do tipo deque
. Por outro lado, podemos declarar um objeto de fila e adicionar elementos usando a função push
. No trecho de código acima, demonstramos os métodos acima e imprimimos o conteúdo das filas usando a função printQueue
.
Observe que a iteração sobre os elementos da fila é feita com o loop while
utilizando a função empty
porque os iteradores não são acessíveis. Em cada bucle de loop, acessamos o primeiro elemento usando a função de membro front
e usamos pop
para remover o mesmo elemento. Como a última operação modifica o objeto de fila original, nós o aceitamos como o argumento de valor em vez de a referência.
Use a função de membro size
para recuperar o tamanho da fila em C++
Você pode usar a função de membro size
para recuperar o número de elementos no objeto de fila. A função tem um desempenho de tempo 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;
}
Resultado:
size of the queue = 6
Use a função de membro swap
para trocar o conteúdo de dois objetos de fila em C++
Podemos trocar os elementos de dois objetos de fila usando a função de membro swap
. Ele pega outro objeto de fila como o único argumento e troca seu conteúdo com o objeto chamador. Observe que o objeto de argumento atribuiu o conteúdo da fila do chamador.
#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;
}
Resultado:
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