Use o contêiner de fila STL em C++
- 
          
            Use std::queuepara declarar um objeto STL Queue em C++
- 
          
            Use a função de membro sizepara recuperar o tamanho da fila em C++
- 
          
            Use a função de membro swappara 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