Namensräume
Varianten
Aktionen

std::queue

Von cppreference.com
< cpp‎ | container
 
 
 
 
Definiert in Header <queue>
template<

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

> class queue;

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 std::queue sind constexpr: Es ist möglich, std::queue-Objekte zur Auswertung eines konstanten Ausdrucks zu erstellen und zu verwenden.

Allerdings können std::queue-Objekte im Allgemeinen nicht constexpr sein, da jeder dynamisch zugewiesene Speicher im selben konstanten Ausdruck freigegeben werden muss.

(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[edit]
value_type Container::value_type[edit]
size_type Container::size_type[edit]
Referenz Container::reference[edit]
const_reference Container::const_reference[edit]

[bearbeiten] Member-Objekte

Member-Name Definition
Container c
der zugrunde liegende Container
(protected member object) [edit]

[bearbeiten] Member-Funktionen

konstruiert die queue
(public member function) [edit]
destruiert die queue
(public member function) [edit]
weist Werte dem Container-Adapter zu
(public member function) [edit]
Elementzugriff
Greift auf das erste Element zu
(public member function) [edit]
Greift auf das letzte Element zu
(public member function) [edit]
Kapazität
prüft, ob der Container-Adapter leer ist
(public member function) [edit]
Gibt die Anzahl der Elemente zurück
(public member function) [edit]
Modifizierer
fügt ein Element am Ende ein
(public member function) [edit]
fügt einen Bereich von Elementen am Ende ein
(public member function) [edit]
(C++11)
konstruiert ein Element "in-place" am Ende
(public member function) [edit]
entfernt das erste Element
(public member function) [edit]
(C++11)
tauscht die Inhalte
(public member function) [edit]

[bearbeiten] Nicht-Member-Funktionen

vergleicht lexikographisch die Werte zweier queues
(function template) [edit]
spezialisiert den Algorithmus std::swap
(function template) [edit]

[bearbeiten] Hilfsklassen

spezialisiert das std::uses_allocator Typ-Trait
(Klassenvorlagenspezialisierung) [edit]
Formatierungsunterstützung für std::queue
(Klassenvorlagenspezialisierung) [edit]

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& verwendeten
Referenztypen[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
  1. Wie z.B. Container, die std::vector<bool> ähneln, mit zusätzlicher Unterstützung für pop_front(). Die Auflösung dieses DR
    fügte Unterstützung für std::vector<bool> für std::stack und std::priority_queue hinzu. Die Änderungen bezüglich std::queue
    dienen der Aufrechterhaltung der Konsistenz.

[bearbeiten] Siehe auch

passt einen Container an, um eine Prioritätswarteschlange bereitzustellen
(Klassenvorlage) [edit]
Doppelt-endende Warteschlange
(Klassenvorlage) [edit]
Doppelt verkettete Liste
(Klassenvorlage) [edit]