Usa il contenitore della coda STL in C++

Jinku Hu 12 ottobre 2023
  1. Usa std::queue per dichiarare un oggetto coda STL in C++
  2. Usa la funzione membro size per recuperare la dimensione della coda in C++
  3. Utilizzare la funzione membro swap per scambiare i contenuti di due oggetti coda in C++
Usa il contenitore della coda STL in C++

Questo articolo spiega come utilizzare il contenitore della coda STL in C++.

Usa std::queue per dichiarare un oggetto coda STL in C++

La libreria standard C++ fornisce diverse classi contenitore utilizzate per fornire tipi fondamentali per la gestione di raccolte di oggetti. Tuttavia, ci sono alcuni contenitori speciali chiamati adattatori per contenitori, che trasformano contenitori fondamentali per esigenze speciali con l’interfaccia più ristretta.

Uno di questi adattatori di container è std::queue, che adatta i container di sequenza per fornire una struttura di dati FIFO (first-in-first-out). Si noti che il contenitore fondamentale sottostante dovrebbe implementare i requisiti SequenceContainer e avere quattro funzioni membro: back, front, push_back e pop_front. Solo le funzioni std::deque e std::list dei contenitori fondamentali soddisfano i requisiti di cui sopra e quindi possono essere utilizzate per memorizzare elementi 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;
}

Produzione:

one, eight, six, seven, eleven, ten, one, eight, six, seven, eleven, ten,

Il contenitore std::queue può essere inizializzato utilizzando l’oggetto std::deque esistente. Il costruttore per quest’ultima inizializzazione necessita solo di un argomento di tipo deque. D’altra parte, possiamo dichiarare un oggetto coda e aggiungere elementi usando la funzione push. Nel frammento di codice sopra, dimostriamo i metodi sopra e stampiamo il contenuto delle code usando la funzione printQueue.

Si noti che l’iterazione sugli elementi della coda viene eseguita con il cicli while utilizzando la funzione empty perché gli iteratori non sono accessibili. In ogni bucle di loop, accediamo al primo elemento utilizzando la funzione membro front e usiamo pop per rimuovere lo stesso elemento. Poiché quest’ultima operazione modifica l’oggetto coda originale, lo accettiamo come argomento valore anziché come riferimento.

Usa la funzione membro size per recuperare la dimensione della coda in C++

È possibile utilizzare la funzione membro size per recuperare il numero di elementi nell’oggetto coda. La funzione ha un andamento temporale costante.

#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;
}

Produzione:

size of the queue = 6

Utilizzare la funzione membro swap per scambiare i contenuti di due oggetti coda in C++

Possiamo scambiare gli elementi di due oggetti coda usando la funzione membro swap. Prende un altro oggetto coda come unico argomento e scambia il suo contenuto con l’oggetto chiamante. Si noti che l’oggetto argomento ha assegnato il contenuto della coda del chiamante.

#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;
}

Produzione:

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,
Autore: 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

Articolo correlato - C++ Queue