Use o contêiner de fila STL em C++

Jinku Hu 12 outubro 2023
  1. Use std::queue para declarar um objeto STL Queue em C++
  2. Use a função de membro size para recuperar o tamanho da fila em C++
  3. Use a função de membro swap para trocar o conteúdo de dois objetos de fila em C++
Use o contêiner de fila STL 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,
Autor: Jinku Hu
Jinku Hu avatar Jinku Hu avatar

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

Artigo relacionado - C++ Queue