stack
Klasa
Klasa adaptera kontenera szablonu, która zapewnia ograniczenie funkcjonalności ograniczające dostęp do elementu ostatnio dodanego do określonego typu kontenera bazowego. Klasa stack
jest używana, gdy ważne jest, aby było jasne, że tylko stack
operacje są wykonywane w kontenerze.
Składnia
template <class Type, class Container= deque <Type>>
class stack
Parametry
Type
Typ danych elementu, który ma być przechowywany w stosie.
Container
Typ bazowego kontenera używanego do implementowania stosu. Wartość domyślna to klasa deque<Type>
.
Uwagi
Elementy klasy określone w pierwszym parametrze szablonu obiektu stosu są synonimami value_type
i muszą odpowiadać typowi elementu w podstawowej klasie Type
Container
kontenera określonej przez drugi parametr szablonu. Element Type
musi być przypisywany, aby można było skopiować obiekty tego typu i przypisać wartości do zmiennych tego typu.
Odpowiednie bazowe klasy kontenerów dla stosu obejmują deque
, list
klasę i vector
klasę lub dowolny inny kontener sekwencji, który obsługuje operacje back
, push_back
i pop_back
. Podstawowa klasa kontenera jest hermetyzowana w ramach adaptera kontenera, który uwidacznia tylko ograniczony zestaw funkcji składowych kontenera sekwencji jako interfejs publiczny.
Obiekty stack
są porównywalne, jeśli i tylko wtedy, gdy elementy klasy są porównywalne i są mniej niż porównywalne, jeśli i tylko wtedy, gdy elementy klasy Type
Type
są mniej niż porównywalne.
Klasa
stack
obsługuje strukturę danych last-in, first-out (LIFO). Dobry analog do myślenia byłby stos płyt. Elementy (płyty) mogą być wstawiane, sprawdzane lub usuwane tylko z góry stosu, który jest ostatnim elementem na końcu kontenera podstawowego. Ograniczenie dostępu tylko do górnego elementu jest powodem używaniastack
klasy.Klasa
queue
obsługuje strukturę danych pierwszego wyjścia (FIFO). Dobry analog do myślenia byłoby ludzie w kolejce do kasjera bankowego. Elementy (osoby) można dodać z tyłu wiersza i są usuwane z przodu linii. Zarówno z przodu, jak i z tyłu linii mogą być sprawdzane. Ograniczenie dostępu tylko do elementów przednich i tylnych w ten sposób jest powodem futra przy użyciuqueue
klasy.Klasa
priority_queue
porządkuje elementy tak, aby największy element był zawsze na najwyższym miejscu. Obsługuje on wstawianie elementu oraz inspekcję i usuwanie górnego elementu. Dobry analogia, aby pamiętać, byłoby ludzi w kolejce, gdzie są rozmieszczone według wieku, wzrostu lub innego kryterium.
Elementy członkowskie
Konstruktory
Nazwa/nazwisko | opis |
---|---|
stack |
Tworzy obiekt stack pusty lub jest kopią podstawowego obiektu kontenera. |
Typedefs
Nazwa/nazwisko | opis |
---|---|
container_type |
Typ, który zapewnia kontener podstawowy do dostosowania przez element stack . |
size_type |
Niepodpisany typ liczb całkowitych, który może reprezentować liczbę elementów w obiekcie stack . |
value_type |
Typ reprezentujący typ obiektu przechowywanego jako element w obiekcie stack . |
Funkcje
Nazwa/nazwisko | opis |
---|---|
empty |
Sprawdza, czy element stack jest pusty. |
pop |
Usuwa element z górnej części elementu stack . |
push |
Dodaje element w górnej części elementu stack . |
size |
Zwraca liczbę elementów w elem.stack |
top |
Zwraca odwołanie do elementu w górnej części elementu stack . |
container_type
Typ, który zapewnia kontener podstawowy do dostosowania.
typedef Container container_type;
Uwagi
Typ jest synonimem parametru Container
szablonu . Wszystkie trzy klasy kontenerów sekwencji biblioteki standardowej języka C++ — vector
klasa, list
klasa i domyślna — deque
spełniają wymagania, które mają być używane jako kontener podstawowy dla stack
obiektu. Mogą być również używane typy zdefiniowane przez użytkownika spełniające te wymagania.
Aby uzyskać więcej informacji na temat Container
, zobacz sekcję stack
Uwagi w temacie Klasa .
Przykład
Zobacz przykład, aby zapoznać się z przykładem stack::stack
sposobu deklarowania i używania elementu container_type
.
empty
Sprawdza, czy stos jest pusty.
bool empty() const;
Wartość zwracana
true
jeśli stos jest pusty; false
jeśli stos nie jest żaden.
Przykład
// 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
Usuwa element z góry stosu.
void pop();
Uwagi
Aby zastosować funkcję składową, stos musi mieć wartość nonempty. Górna część stosu jest pozycją zajmowaną przez ostatnio dodany element i jest ostatnim elementem na końcu kontenera.
Przykład
// 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
Dodaje element w górnej części stosu.
void push(const Type& val);
Parametry
val
Element dodany do góry stosu.
Uwagi
Górna część stosu jest pozycją zajmowaną przez ostatnio dodany element i jest ostatnim elementem na końcu kontenera.
Przykład
// 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
Zwraca liczbę elementów w stosie.
size_type size() const;
Wartość zwracana
Bieżąca długość stosu.
Przykład
// 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
Niepodpisany typ liczb całkowitych, który może reprezentować liczbę elementów w stosie.
typedef typename Container::size_type size_type;
Uwagi
Typ jest synonimem size_type
kontenera podstawowego dostosowanego przez stos.
Przykład
Zobacz przykład, aby zapoznać się z przykładem size
sposobu deklarowania i używania elementu size_type
.
stack
Tworzy stos, który jest pusty lub jest kopią klasy kontenera podstawowego.
stack();
explicit stack(const container_type& right);
Parametry
right
Kontener, którego skonstruowany stos ma być kopią.
Przykład
// 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
Zwraca odwołanie do elementu w górnej części stosu.
reference top();
const_reference top() const;
Wartość zwracana
Odwołanie do ostatniego elementu w kontenerze w górnej części stosu.
Uwagi
Aby zastosować funkcję składową, stos musi mieć wartość nonempty. Górna część stosu jest pozycją zajmowaną przez ostatnio dodany element i jest ostatnim elementem na końcu kontenera.
Jeśli zwracana wartość top
elementu jest przypisana do const_reference
obiektu , stack
nie można zmodyfikować obiektu. Jeśli wartość zwracana top
obiektu jest przypisana do reference
obiektu , stack
można go zmodyfikować.
Przykład
// 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
Typ reprezentujący typ obiektu przechowywanego jako element w stosie.
typedef typename Container::value_type value_type;
Uwagi
Typ jest synonimem value_type
kontenera podstawowego dostosowanego przez stos.
Przykład
// 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.
Zobacz też
Bezpieczeństwo wątku w standardowej bibliotece C++
Dokumentacja standardowej biblioteki C++