Verwendung von den STL-Warteschlangencontainer in C++

Jinku Hu 12 Oktober 2023
  1. Verwenden Sie std::queue, um ein STL-Warteschlangenobjekt in C++ zu deklarieren
  2. Verwenden Sie die Member-Funktion size, um die Größe der Warteschlange in C++ abzurufen
  3. Verwenden Sie die Member-Funktion swap, um den Inhalt von zwei Queue-Objekten in C++ auszutauschen
Verwendung von den STL-Warteschlangencontainer in C++

In diesem Artikel wird erläutert, wie Sie den STL-Warteschlangencontainer in C++ verwenden.

Verwenden Sie std::queue, um ein STL-Warteschlangenobjekt in C++ zu deklarieren

Die C++-Standardbibliothek stellt mehrere Containerklassen bereit, die verwendet werden, um grundlegende Typen für die Verwaltung von Objektsammlungen bereitzustellen. Allerdings gibt es einige spezielle Container, sogenannte Container Adapter, die grundlegende Container für spezielle Bedürfnisse mit der engsten Schnittstelle umwandeln.

Einer dieser Containeradapter ist std::queue, der Sequenzcontainer anpasst, um eine FIFO-Datenstruktur (First-in-First-out) bereitzustellen. Beachten Sie, dass der zugrunde liegende fundamentale Container die SequenceContainer-Anforderungen implementieren und vier Member-Funktionen haben sollte: back, front, push_back und pop_front. Nur die Funktionen std::deque und std::list aus den grundlegenden Containern erfüllen die obigen Anforderungen und können somit zum Speichern von queue-Elementen verwendet werden.

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

Ausgabe:

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

Der Container std::queue kann mit dem vorhandenen std::deque-Objekt initialisiert werden. Der Konstruktor für letztere Initialisierung benötigt nur ein Argument vom Typ deque. Andererseits können wir ein Queue-Objekt deklarieren und Elemente mit der Funktion push hinzufügen. Im obigen Code-Schnipsel demonstrieren wir die obigen Methoden und drucken den Inhalt der Warteschlangen mit der Funktion printQueue.

Beachten Sie, dass die Iteration über die Warteschlangenelemente mit der Schleife while mit der Funktion empty erfolgt, da auf Iteratoren nicht zugegriffen werden kann. In jedem Schleifenzyklus greifen wir mit der Member-Funktion front auf das erste Element zu und verwenden pop, um dasselbe Element zu entfernen. Da letztere Operation das ursprüngliche Queue-Objekt modifiziert, akzeptieren wir es als Wertargument und nicht als Referenz.

Verwenden Sie die Member-Funktion size, um die Größe der Warteschlange in C++ abzurufen

Sie können die Member-Funktion size verwenden, um die Anzahl der Elemente im Queue-Objekt abzurufen. Die Funktion hat ein konstantes Zeitverhalten.

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

Ausgabe:

size of the queue = 6

Verwenden Sie die Member-Funktion swap, um den Inhalt von zwei Queue-Objekten in C++ auszutauschen

Mit der Member-Funktion swap können wir die Elemente zweier Queue-Objekte austauschen. Es nimmt ein anderes Queue-Objekt als einziges Argument und tauscht seinen Inhalt mit dem Aufrufer-Objekt aus. Beachten Sie, dass das Argumentobjekt den Inhalt der Anruferwarteschlange zugewiesen hat.

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

Ausgabe:

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

Verwandter Artikel - C++ Queue