std::queue
| Definiert in Header <queue> |
||
| template< class T, |
||
Die Klassenvorlage std::queue ist ein Container-Adapter, der die Funktionalität einer Warteschlange (engl. queue) – insbesondere eine FIFO-Datenstruktur (First-In, First-Out) – bereitstellt.
Die Klassenvorlage fungiert als Wrapper für den zugrunde liegenden Container – es werden nur eine bestimmte Menge an Funktionen bereitgestellt. Die Warteschlange fügt die Elemente am Ende des zugrunde liegenden Containers ein und entfernt sie vom Anfang.
|
Alle Member-Funktionen von |
(seit C++26) |
Inhalt |
[bearbeiten] Template-Parameter
| T | - | Der Typ der gespeicherten Elemente. Das Programm ist fehlerhaft, wenn T nicht vom gleichen Typ wie Container::value_type ist. |
| Container | - | Der Typ des zugrunde liegenden Containers, der zur Speicherung der Elemente verwendet wird. Der Container muss die Anforderungen eines SequenceContainer erfüllen. Zusätzlich muss er die folgenden Funktionen mit den üblichen Semantiken bereitstellen:
Die Standardcontainer std::deque und std::list erfüllen diese Anforderungen. |
[bearbeiten] Member-Typen
| Mitgliedertyp | Definition |
container_type
|
Container |
value_type
|
Container::value_type |
size_type
|
Container::size_type |
Referenz
|
Container::reference |
const_reference
|
Container::const_reference |
[bearbeiten] Member-Objekte
| Member-Name | Definition |
| Container c |
der zugrunde liegende Container (protected member object) |
[bearbeiten] Member-Funktionen
konstruiert die queue(public member function) | |
destruiert die queue(public member function) | |
| weist Werte dem Container-Adapter zu (public member function) | |
Elementzugriff | |
| Greift auf das erste Element zu (public member function) | |
| Greift auf das letzte Element zu (public member function) | |
Kapazität | |
| prüft, ob der Container-Adapter leer ist (public member function) | |
| Gibt die Anzahl der Elemente zurück (public member function) | |
Modifizierer | |
| fügt ein Element am Ende ein (public member function) | |
| (C++23) |
fügt einen Bereich von Elementen am Ende ein (public member function) |
| (C++11) |
konstruiert ein Element "in-place" am Ende (public member function) |
| entfernt das erste Element (public member function) | |
| (C++11) |
tauscht die Inhalte (public member function) |
[bearbeiten] Nicht-Member-Funktionen
vergleicht lexikographisch die Werte zweier queues(function template) | |
| (C++11) |
spezialisiert den Algorithmus std::swap (function template) |
[bearbeiten] Hilfsklassen
| spezialisiert das std::uses_allocator Typ-Trait (Klassenvorlagenspezialisierung) | |
| (C++23) |
Formatierungsunterstützung für std::queue(Klassenvorlagenspezialisierung) |
Deduction Guides |
(seit C++17) |
[bearbeiten] Anmerkungen
| Feature-Test-Makro | Wert | Std | Feature |
|---|---|---|---|
__cpp_lib_containers_ranges |
202202L |
(C++23) | Bereichskonstruktion und -einfügung für Container |
__cpp_lib_constexpr_containers |
202502L |
(C++26) | constexpr std::queue |
[bearbeiten] Beispiel
#include <cassert> #include <iostream> #include <queue> int main() { std::queue<int> q; q.push(0); // back pushes 0 q.push(1); // q = 0 1 q.push(2); // q = 0 1 2 q.push(3); // q = 0 1 2 3 assert(q.front() == 0); assert(q.back() == 3); assert(q.size() == 4); q.pop(); // removes the front element, 0 assert(q.size() == 3); // Print and remove all elements. Note that std::queue does not // support begin()/end(), so a range-for-loop cannot be used. std::cout << "q: "; for (; !q.empty(); q.pop()) std::cout << q.front() << ' '; std::cout << '\n'; assert(q.size() == 0); }
Ausgabe
q: 1 2 3
[bearbeiten] Fehlerberichte
Die folgenden Verhaltensändernden Fehlerberichte wurden rückwirkend auf zuvor veröffentlichte C++-Standards angewendet.
| DR | angewendet auf | Verhalten wie veröffentlicht | Korrigiertes Verhalten |
|---|---|---|---|
| LWG 307 | C++98 | std::queue unterstützte keine Container, die Proxy-Referenztypen anstelle von (const) value_type& verwendetenReferenztypen[1] anstelle von ( const) value_type& |
unterstützt |
| LWG 2566 | C++98 | Fehlende Anforderung für Container::value_type |
fehlerhaft, wenn T nicht vom gleichen Typ wie Container::value_type ist |
- ↑ Wie z.B. Container, die
std::vector<bool>ähneln, mit zusätzlicher Unterstützung fürpop_front(). Die Auflösung dieses DR
fügte Unterstützung fürstd::vector<bool>fürstd::stackundstd::priority_queuehinzu. Die Änderungen bezüglichstd::queue
dienen der Aufrechterhaltung der Konsistenz.
[bearbeiten] Siehe auch
| passt einen Container an, um eine Prioritätswarteschlange bereitzustellen (Klassenvorlage) | |
| Doppelt-endende Warteschlange (Klassenvorlage) | |
| Doppelt verkettete Liste (Klassenvorlage) |