Freigeben über


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_backund 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 der stack 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 der queue 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 Containerdar. 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 Containerfinden Sie im Abschnitt "Hinweise" des stack Themas "Klasse ".

Beispiel

Ein Beispiel für stack::stack das Deklarieren und Verwenden container_typefinden 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_typefinden 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_referenceObjekts zugewiesen ist, kann das stack Objekt nicht geändert werden. Wenn der Rückgabewert top eines referenceObjekts 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