stack
-Klasse
Eine Vorlagencontainer-Adapterklasse, die die Funktionalität einschränkt, indem sie den Zugriff auf das Element beschränkt, das zuletzt zu einem zugrunde liegenden Containertyp hinzugefügt wurde. Die stack
Klasse wird verwendet, wenn es wichtig ist, klar zu sein, dass nur stack
Vorgänge für den Container ausgeführt werden.
Syntax
template <class Type, class Container= deque <Type>>
class stack
Parameter
Type
Der Datentyp der Elemente, die im Stapel gespeichert werden sollen.
Container
Der Typ des zugrunde liegenden Containers, der verwendet wird, um den Stapel zu implementieren. Der Standardwert ist die Klasse deque<Type>
.
Hinweise
Die Klassenelemente, Type
die im ersten Vorlagenparameter eines Stapelobjekts festgelegt sind, sind synonym mit value_type
und müssen mit dem Typ des Elements in der zugrunde liegenden Containerklasse Container
übereinstimmen, die vom zweiten Vorlagenparameter festgelegt wird. Die Type
Zuordnung muss zulässig sein, damit Objekte dieses Typs kopiert und Variablen dieses Typs Werte zugewiesen werden können.
Geeignete zugrunde liegende Containerklassen für Stapel umfassen deque
,list
Klasse und vector
Klasse oder einen anderen Sequenzcontainer, der die Vorgänge von back
, , push_back
und pop_back
. Die zugrunde liegende Containerklasse wird im Containeradapter gekapselt, der nur den begrenzten Satz der Memberfunktionen des Sequenzcontainers als öffentliche Schnittstelle verfügbar macht.
Die stack
Objekte sind gleichgleich, wenn und nur, wenn die Elemente der Klasse Type
gleichwertig sind und kleiner als vergleichbar sind, wenn und nur, wenn die Elemente der Klasse Type
kleiner als vergleichbar sind.
Die
stack
Klasse unterstützt eine Last-in-First-Out-Datenstruktur (LIFO). Eine gute Analogie, um sich dies zu merken, ist ein Stapel von Tellern. Elemente (Teller) können eingefügt, überprüft oder nur vom Anfang des Stapels entnommen werden, was dem letzten Element am Ende des Basiscontainers entspricht. Die Einschränkung, nur auf das oberste Element zuzugreifen, ist der Grund für die Verwendung derstack
Klasse.Die
queue
Klasse unterstützt eine FiFO-Datenstruktur (First In, First-Out). Eine gute Analogie, um sich dies zu merken, sind Personen, die an einem Bankschalter anstehen. Elemente (Personen) können am Ende der Schlange hinzugefügt werden und vom Anfang der Schlange entfernt werden. Sowohl der Anfang als auch das Ende einer Schlange können überprüft werden. Die Einschränkung für den Zugriff auf die Vorder- und Rückseitenelemente auf diese Weise ist der Grund für die Verwendung derqueue
Klasse.Die
priority_queue
Klasse sortiert ihre Elemente so, dass das größte Element immer an der obersten Position liegt. Die Klasse unterstützt Einfügen eines Elements sowie die Prüfung und Entfernung des obersten Elements. Eine gute Analogie, um sich dies zu merken, sind Personen, die in einer Schlange stehen, in der sie nach Alter, Größe oder einem anderen Kriterium angeordnet sind.
Member
Konstruktoren
Name | Beschreibung |
---|---|
stack |
Erstellt ein stack -Objekt, das leer oder eine Kopie eines Basiscontainerobjekts ist. |
TypeDefs
Name | Beschreibung |
---|---|
container_type |
Ein Typ, der den Basiscontainer bereitstellt, der durch ein stack -Objekt übernommen werden soll. |
size_type |
Eine Ganzzahltyp ohne Vorzeichen, der die Anzahl von Elementen in stack darstellen kann. |
value_type |
Ein Typ, der den Typ des Objekts angibt, das in einem stack -Objekt als Element gespeichert wird. |
Functions
Name | Beschreibung |
---|---|
empty |
Testet, ob das stack -Objekt ist leer. |
pop |
Entfernt das Element aus der obersten Position des stack -Objekts. |
push |
Fügt ein Element an der obersten Position des stack -Objekts hinzu. |
size |
Gibt die Anzahl von Elementen in der stack zurück. |
top |
Gibt einen Verweis auf das Element in der obersten Position des stack -Objekts zurück. |
container_type
Ein Typ, der den anzupassenden Basiscontainer bereitstellt.
typedef Container container_type;
Hinweise
Der Type stellt ein Synonym für den Vorlagenparameter Container
dar. Alle drei Containerklassen der C++-Standardbibliothek – klasse vector
, list
Klasse und Standardklasse deque
– erfüllen die Anforderungen, die als Basiscontainer für ein stack
Objekt verwendet werden sollen. Benutzerdefinierte Typen, die diese Anforderung erfüllen, können auch verwendet werden.
Weitere Informationen Container
finden Sie im Abschnitt "Hinweise" des stack
Themas "Klasse ".
Beispiel
Ein Beispiel für stack::stack
das Deklarieren und Verwenden container_type
finden Sie im Beispiel.
empty
Testet, ob ein Stack leer ist.
bool empty() const;
Rückgabewert
true
wenn der Stapel leer ist; false
wenn der Stapel nicht inAktiv ist.
Beispiel
// stack_empty.cpp
// compile with: /EHsc
#include <stack>
#include <iostream>
int main( )
{
using namespace std;
// Declares stacks with default deque base container
stack <int> s1, s2;
s1.push( 1 );
if ( s1.empty( ) )
cout << "The stack s1 is empty." << endl;
else
cout << "The stack s1 is not empty." << endl;
if ( s2.empty( ) )
cout << "The stack s2 is empty." << endl;
else
cout << "The stack s2 is not empty." << endl;
}
The stack s1 is not empty.
The stack s2 is empty.
pop
Entfernt das Element aus der obersten Position des Stacks.
void pop();
Hinweise
Der Stack darf nicht leer sein, damit die Memberfunktion angewendet wird. Der Anfang des Stacks ist die Position des zuletzt hinzugefügten Elements und ist das letzte Element am Ende des Containers.
Beispiel
// stack_pop.cpp
// compile with: /EHsc
#include <stack>
#include <iostream>
int main( )
{
using namespace std;
stack <int> s1, s2;
s1.push( 10 );
s1.push( 20 );
s1.push( 30 );
stack <int>::size_type i;
i = s1.size( );
cout << "The stack length is " << i << "." << endl;
i = s1.top( );
cout << "The element at the top of the stack is "
<< i << "." << endl;
s1.pop( );
i = s1.size( );
cout << "After a pop, the stack length is "
<< i << "." << endl;
i = s1.top( );
cout << "After a pop, the element at the top of the stack is "
<< i << "." << endl;
}
The stack length is 3.
The element at the top of the stack is 30.
After a pop, the stack length is 2.
After a pop, the element at the top of the stack is 20.
push
Fügt oben im Stapel ein Element hinzu.
void push(const Type& val);
Parameter
val
Das am Anfang des Stacks hinzugefügte Element.
Hinweise
Der Anfang des Stacks ist die Position des zuletzt hinzugefügten Elements und ist das letzte Element am Ende des Containers.
Beispiel
// stack_push.cpp
// compile with: /EHsc
#include <stack>
#include <iostream>
int main( )
{
using namespace std;
stack <int> s1;
s1.push( 10 );
s1.push( 20 );
s1.push( 30 );
stack <int>::size_type i;
i = s1.size( );
cout << "The stack length is " << i << "." << endl;
i = s1.top( );
cout << "The element at the top of the stack is "
<< i << "." << endl;
}
The stack length is 3.
The element at the top of the stack is 30.
size
Gibt die Anzahl der Elemente im Stack zurück.
size_type size() const;
Rückgabewert
Die aktuelle Länge des Stacks.
Beispiel
// stack_size.cpp
// compile with: /EHsc
#include <stack>
#include <iostream>
int main( )
{
using namespace std;
stack <int> s1, s2;
stack <int>::size_type i;
s1.push( 1 );
i = s1.size( );
cout << "The stack length is " << i << "." << endl;
s1.push( 2 );
i = s1.size( );
cout << "The stack length is now " << i << "." << endl;
}
The stack length is 1.
The stack length is now 2.
size_type
Ein Ganzzahltyp ohne Vorzeichen, der die Anzahl von Elementen in einem Stack darstellen kann.
typedef typename Container::size_type size_type;
Hinweise
Der Typ ist ein Synonym für size_type
des Basiscontainers und vom Stack angepasst.
Beispiel
Ein Beispiel für size
das Deklarieren und Verwenden size_type
finden Sie im Beispiel.
stack
Erstellt ein einen Stack, der leer oder eine Kopie eines Basiscontainerobjekts ist.
stack();
explicit stack(const container_type& right);
Parameter
right
Der Container, dessen Kopie der erstellte Stack sein soll.
Beispiel
// stack_stack.cpp
// compile with: /EHsc
#include <stack>
#include <vector>
#include <list>
#include <iostream>
int main( )
{
using namespace std;
// Declares stack with default deque base container
stack <char> dsc1;
//Explicitly declares a stack with deque base container
stack <char, deque<char> > dsc2;
// Declares a stack with vector base containers
stack <int, vector<int> > vsi1;
// Declares a stack with list base container
stack <int, list<int> > lsi;
// The second member function copies elements from a container
vector<int> v1;
v1.push_back( 1 );
stack <int, vector<int> > vsi2( v1 );
cout << "The element at the top of stack vsi2 is "
<< vsi2.top( ) << "." << endl;
}
The element at the top of stack vsi2 is 1.
top
Gibt einen Verweis auf ein Element am Anfang des Stacks zurück.
reference top();
const_reference top() const;
Rückgabewert
Ein Verweis auf das letzte Element im Container am Anfang des Stacks.
Hinweise
Der Stack darf nicht leer sein, damit die Memberfunktion angewendet wird. Der Anfang des Stacks ist die Position des zuletzt hinzugefügten Elements und ist das letzte Element am Ende des Containers.
Wenn der Rückgabewert top
eines const_reference
Objekts zugewiesen ist, kann das stack
Objekt nicht geändert werden. Wenn der Rückgabewert top
eines reference
Objekts zugewiesen ist, kann das stack
Objekt geändert werden.
Beispiel
// stack_top.cpp
// compile with: /EHsc
#include <stack>
#include <iostream>
int main( )
{
using namespace std;
stack <int> s1;
s1.push( 1 );
s1.push( 2 );
int& i = s1.top( );
const int& ii = s1.top( );
cout << "The top integer of the stack s1 is "
<< i << "." << endl;
i--;
cout << "The next integer down is "<< ii << "." << endl;
}
The top integer of the stack s1 is 2.
The next integer down is 1.
value_type
Ein Typ, der den Typ des Objekts angibt, das in einem Stack als Element gespeichert wird.
typedef typename Container::value_type value_type;
Hinweise
Der Typ ist ein Synonym für value_type
des Basiscontainers und vom Stack angepasst.
Beispiel
// stack_value_type.cpp
// compile with: /EHsc
#include <stack>
#include <iostream>
int main( )
{
using namespace std;
// Declares stacks with default deque base container
stack<int>::value_type AnInt;
AnInt = 69;
cout << "The value_type is AnInt = " << AnInt << endl;
stack<int> s1;
s1.push( AnInt );
cout << "The element at the top of the stack is "
<< s1.top( ) << "." << endl;
}
The value_type is AnInt = 69
The element at the top of the stack is 69.
Siehe auch
Threadsicherheit in der C++-Standardbibliothek
C++-Standardbibliotheksreferenz