Verwendung von den STL-Warteschlangencontainer in C++
-
Verwenden Sie
std::queue
, um ein STL-Warteschlangenobjekt in C++ zu deklarieren -
Verwenden Sie die Member-Funktion
size
, um die Größe der Warteschlange in C++ abzurufen -
Verwenden Sie die Member-Funktion
swap
, um den Inhalt von zwei Queue-Objekten in C++ auszutauschen
![Verwendung von den STL-Warteschlangencontainer in C++](/img/Cpp/ag-feature-image---queue-in-cpp.webp)
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,
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