Udostępnij za pośrednictwem


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_backi 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żywania stack 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życiu queue 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 Containerszablonu . 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_referenceobiektu , stack nie można zmodyfikować obiektu. Jeśli wartość zwracana top obiektu jest przypisana do referenceobiektu , 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++