Namespaces
Variants

std:: stack

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

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

> class stack ;

Die std::stack -Klasse ist ein Container-Adapter , der dem Programmierer die Funktionalität eines Stapelspeichers bietet - genauer gesagt, einer LIFO (Last-In, First-Out) Datenstruktur.

Die Klassenvorlage dient als Wrapper für den zugrunde liegenden Container - es wird nur ein spezifischer Satz von Funktionen bereitgestellt. Der Stack schiebt Elemente von der Rückseite des zugrunde liegenden Containers hinein und holt sie von dort heraus, was als die Oberseite des Stacks bekannt ist.

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

Allerdings können std::stack -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::vector (einschließlich std::vector<bool> ), std::deque und std::list erfüllen diese Anforderungen. Standardmäßig wird, wenn für eine bestimmte Stack-Klasseninstanziierung kein Container angegeben ist, der Standardcontainer std::deque verwendet.

Mitgliedertypen

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

Member-Objekte

Mitglied Beschreibung
Container c
das zugrundeliegende Container-Objekt
(geschütztes Mitgliedsobjekt)

Memberfunktionen

Konstruiert den stack
(öffentliche Elementfunktion)
Zerstört den stack
(öffentliche Elementfunktion)
weist Werte dem Container-Adapter zu
(öffentliche Elementfunktion)
Elementzugriff
greift auf das oberste 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 oben ein
(öffentliche Elementfunktion)
(C++23)
fügt einen Bereich von Elementen oben ein
(öffentliche Elementfunktion)
(C++11)
konstruiert Element direkt an der Spitze
(öffentliche Elementfunktion)
entfernt das oberste Element
(öffentliche Elementfunktion)
(C++11)
tauscht die Inhalte aus
(öffentliche Elementfunktion)

Nicht-Member-Funktionen

vergleicht die Werte von zwei stack s lexikographisch
(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::stack
(Klassen-Template-Spezialisierung)

Deduktionsleitfäden

(seit C++17)

Hinweise

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

Beispiel

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 Container konnte nicht std::vector<bool> sein erlaubt
LWG 2566 C++98 Fehlende Anforderung für Container::value_type fehlerhaft, wenn T nicht dem selben Typ wie Container::value_type entspricht

Siehe auch

veränderbares zusammenhängendes Array
(Klassen-Template)
platzsparende dynamische Bitmenge
(Klassen-Template-Spezialisierung)
doppelseitige Warteschlange
(Klassen-Template)
doppelt verkettete Liste
(Klassen-Template)