Namensräume
Varianten
Aktionen

std::stack

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

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

> class stack;

Die Klasse std::stack ist ein Container-Adapter, der dem Programmierer die Funktionalität eines Stacks zur Verfügung stellt – genauer gesagt einer LIFO (Last-In, First-Out)-Datenstruktur.

Die Klassenvorlage fungiert als Wrapper für den zugrunde liegenden Container – nur eine spezifische Menge von Funktionen wird bereitgestellt. Der Stack fügt Elemente am Ende des zugrunde liegenden Containers ein und entfernt sie von dort, was als Oberseite des Stacks bezeichnet wird.

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

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

(seit C++26)

Inhalt

[edit] 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 an einen SequenceContainer erfüllen. Zusätzlich muss er die folgenden Funktionen mit den üblichen Semantiken bereitstellen:

Die Standardcontainer std::vector (einschließlich std::vector<bool>), std::deque und std::list erfüllen diese Anforderungen. Standardmäßig, wenn für eine bestimmte Stack-Klasseninstanziierung kein Container angegeben wird, wird der Standardcontainer std::deque verwendet.

[edit] Member-Typen

Typ 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]

[edit] Member-Objekte

Mitglied Beschreibung
Container c
der zugrunde liegende Container
(protected member object) [edit]

[edit] Member-Funktionen

konstruiert den stack
(public member function) [edit]
destruiert den stack
(public member function) [edit]
weist Werte dem Container-Adapter zu
(public member function) [edit]
Elementzugriff
greift auf das oberste 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 oben ein
(public member function) [edit]
fügt einen Elementbereich oben ein
(public member function) [edit]
(C++11)
konstruiert ein Element inplace an der Oberseite
(public member function) [edit]
entfernt das oberste Element
(public member function) [edit]
(C++11)
tauscht die Inhalte
(public member function) [edit]

[edit] Nicht-Member-Funktionen

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

[edit] Hilfsklassen

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

Deduction Guides

(seit C++17)

[edit] 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::stack

[edit] Beispiel

[edit] 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 Container konnte nicht std::vector<bool> sein erlaubt
LWG 2566 C++98 Fehlende Anforderung für Container::value_type fehlerhaft, wenn T nicht vom gleichen Typ wie Container::value_type ist

[edit] Siehe auch

reservierbares, zusammenhängendes Array
(Klassenvorlage) [edit]
speichereffizientes dynamisches Bitset
(class template specialization) [edit]
Doppelt-endende Warteschlange
(Klassenvorlage) [edit]
Doppelt verkettete Liste
(Klassenvorlage) [edit]