Namespaces
Variants

std:: queue

From cppreference.net
Definiert im Header <queue>
template <

class T,
class Container = std:: deque < T >

> class queue ;

Die std::queue -Klassenvorlage ist ein Container-Adapter , der die Funktionalität einer Warteschlange bereitstellt - genauer gesagt, einer FIFO-Datenstruktur (First-In, First-Out).

Die Klassenvorlage fungiert als Wrapper für den zugrundeliegenden Container - es wird nur ein spezifischer Satz von Funktionen bereitgestellt. Die Queue schiebt die Elemente auf das Ende des zugrundeliegenden Containers und entfernt sie von der Vorderseite.

Alle Memberfunktionen von std::queue sind constexpr : Es ist möglich, std::queue -Objekte in der Auswertung eines konstanten Ausdrucks zu erstellen und zu verwenden.

Allerdings können std::queue -Objekte im Allgemeinen nicht constexpr sein, da jeder dynamisch allokierte Speicher in derselben Auswertung des konstanten Ausdrucks freigegeben werden muss.

(seit C++26)

Inhaltsverzeichnis

Template-Parameter

T - Der Typ der gespeicherten Elemente. Das Programm ist fehlerhaft, wenn T nicht derselbe Typ wie Container::value_type ist.
Container - Der Typ des zugrundeliegenden Containers, der zur Speicherung der Elemente verwendet wird. Der Container muss die Anforderungen von 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.

Mitgliedertypen

Mitgliedtyp Definition
container_type Container
value_type Container::value_type
size_type Container :: size_type
reference Container::reference
const_reference Container::const_reference

Member-Objekte

Mitgliedername Definition
Container c
der zugrundeliegende Container
(geschütztes Mitgliedsobjekt)

Memberfunktionen

Konstruiert die queue
(öffentliche Elementfunktion)
Zerstört die queue
(öffentliche Elementfunktion)
Weist Werte dem Container-Adapter zu
(öffentliche Elementfunktion)
Elementzugriff
Greift auf das erste Element zu
(öffentliche Elementfunktion)
Greift auf das letzte Element zu
(öffentliche Elementfunktion)
Kapazität
Prüft, ob der Container-Adapter leer ist
(öffentliche Elementfunktion)
Gibt die Anzahl der Elemente zurück
(öffentliche Elementfunktion)
Modifikatoren
Fügt Element am Ende ein
(öffentliche Elementfunktion)
(C++23)
Fügt einen Bereich von Elementen am Ende ein
(öffentliche Elementfunktion)
(C++11)
Konstruiert Element direkt am Ende
(öffentliche Elementfunktion)
Entfernt das erste Element
(öffentliche Elementfunktion)
(C++11)
Tauscht die Inhalte aus
(öffentliche Elementfunktion)

Nicht-Member-Funktionen

vergleicht lexikographisch die Werte zweier queue s
(Funktions-Template)
spezialisiert den std::swap -Algorithmus
(Funktions-Template)

Hilfsklassen

spezialisiert das std::uses_allocator Typ-Trait
(Klassen-Template-Spezialisierung)
Formatierungsunterstützung für std::queue
(Klassen-Template-Spezialisierung)

Deduktionsleitfäden

(seit C++17)

Hinweise

Feature-Test Makro Wert Std Funktion
__cpp_lib_containers_ranges 202202L (C++23) Ranges-Konstruktion und -Einfügung für Container
__cpp_lib_constexpr_queue 202502L (C++26) constexpr std::queue

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

Fehlerberichte

Die folgenden verhaltensändernden Fehlerberichte wurden rückwirkend auf zuvor veröffentlichte C++-Standards angewendet.

DR Angewendet auf Verhalten wie veröffentlicht Korrektes Verhalten
LWG 307 C++98 std::queue unterstützte keine Container, die Proxy-Referenztypen
verwenden [1] anstelle von ( const ) value_type&
unterstützt
LWG 2566 C++98 Fehlende Anforderung für Container::value_type fehlerhaft, wenn T nicht der gleiche Typ wie Container::value_type ist
  1. Wie etwa Container ähnlich std::vector<bool> mit zusätzlicher Unterstützung von pop_front() . Die Lösung dieses DR
    fügte Unterstützung für std::vector<bool> in std::stack und std::priority_queue hinzu. Die Änderungen bezüglich std::queue
    dienen der Wahrung der Konsistenz.

Siehe auch

passt einen Container für eine Prioritätswarteschlange an
(Klassen-Template)
doppelseitige Warteschlange
(Klassen-Template)
doppelt verkettete Liste
(Klassen-Template)