Sdílet prostřednictvím


stack Třída

Třída adaptéru kontejneru šablony, která poskytuje omezení funkčnosti omezující přístup k prvku, který byl naposledy přidán do některého základního typu kontejneru. Třída stack se používá, pokud je důležité vymazat, že se v kontejneru provádějí pouze stack operace.

Syntaxe

template <class Type, class Container= deque <Type>>
class stack

Parametry

Type
Datový typ elementu, který se má uložit do zásobníku.

Container
Typ základního kontejneru použitého k implementaci zásobníku. Výchozí hodnota je třída deque<Type>.

Poznámky

Prvky třídy Type stanovené v prvním parametru šablony objektu zásobníku jsou synonymem value_type a musí odpovídat typu prvku v podkladové třídě Container kontejneru stanovené druhým parametrem šablony. Musí Type být přiřaditelné, aby bylo možné kopírovat objekty tohoto typu a přiřazovat hodnoty proměnným daného typu.

Vhodné podkladové třídy kontejneru pro zásobník zahrnujídeque, list třídu avectortřídu nebo jakýkoli jiný sekvencí kontejner, který podporuje operace back, push_backa pop_back. Základní třída kontejneru je zapouzdřena v adaptéru kontejneru, která zveřejňuje pouze omezenou sadu členů kontejneru sekvence jako veřejné rozhraní.

Objekty stack jsou srovnatelné, pokud a pouze pokud jsou prvky třídy Type srovnatelné a jsou menší než srovnatelné, a pouze pokud jsou prvky třídy Type menší než srovnatelné.

  • Třída stack podporuje datovou strukturu liFO (last-in). Dobrý analog, který byste měli mít na paměti, by byl zásobník plátů. Prvky (desky) lze vložit, zkontrolovat nebo odebrat pouze z horní části zásobníku, což je poslední prvek na konci základního kontejneru. Důvodem použití třídy je omezení pro přístup pouze k hornímu stack prvku.

  • Třída queue podporuje datovou strukturu FIFO (first-in). Dobrý analog, který byste měli mít na paměti, by byl lidé, kteří se vysílají do bankovního řekněte. Prvky (osoby) mohou být přidány do zadní části řádku a jsou odebrány z přední části čáry. Je možné zkontrolovat přední i zadní stranu čáry. Omezení přístupu pouze k předním a zadním prvkům tímto způsobem je důvodem použití třídy fur queue .

  • Třída priority_queue objednává své prvky tak, aby největší prvek byl vždy na nejvyšší pozici. Podporuje vložení prvku a kontrolu a odebrání horního prvku. Dobrým analogem, který byste měli mít na paměti, by byli lidé, kteří se nacházejí v místě, kde jsou uspořádány podle věku, výšky nebo jiného kritéria.

Členové

Konstruktory

Jméno popis
stack stack Vytvoří prázdný objekt kontejneru nebo kopii základního objektu kontejneru.

Typedefs

Jméno popis
container_type Typ, který poskytuje základní kontejner, který má být upraven pomocí stack.
size_type Typ celého čísla bez znaménka, který může představovat počet prvků v objektu stack.
value_type Typ, který představuje typ objektu uloženého jako prvek v objektu stack.

Funkce

Jméno popis
empty Testuje, stack jestli je prázdný.
pop Odebere prvek z horní části stack.
push Přidá prvek na začátek .stack
size Vrátí počet prvků v sadě stack.
top Vrátí odkaz na prvek v horní části stack.

container_type

Typ, který poskytuje základní kontejner, který se má přizpůsobit.

typedef Container container_type;

Poznámky

Typ je synonymem pro parametr Containeršablony . Všechny tři třídy kontejneru sekvence standardní knihovny C++ – vector třída, list třída a výchozí třída deque – splňují požadavky, které se mají použít jako základní kontejner objektu stack . Uživatelem definované typy, které splňují tyto požadavky, lze použít také.

Další informace naleznete Containerv části Poznámky tématu předmětustack.

Příklad

Podívejte se na příklad stack::stack , jak deklarovat a používat container_type.

empty

Testuje, jestli je zásobník prázdný.

bool empty() const;

Vrácená hodnota

true pokud je zásobník prázdný; false pokud je zásobník neprázdný.

Příklad

// 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

Odebere prvek z horní části zásobníku.

void pop();

Poznámky

Aby se členová funkce použila, musí být zásobník nechtěný. Horní část zásobníku je pozice obsazená naposledy přidaným prvkem a je posledním prvkem na konci kontejneru.

Příklad

// 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

Přidá prvek na začátek zásobníku.

void push(const Type& val);

Parametry

val
Prvek přidaný do horní části zásobníku.

Poznámky

Horní část zásobníku je pozice obsazená naposledy přidaným prvkem a je posledním prvkem na konci kontejneru.

Příklad

// 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

Vrátí počet prvků v zásobníku.

size_type size() const;

Vrácená hodnota

Aktuální délka zásobníku.

Příklad

// 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

Typ celého čísla bez znaménka, který může představovat počet prvků v zásobníku.

typedef typename Container::size_type size_type;

Poznámky

Typ je synonymem základního size_type kontejneru přizpůsobeného zásobníkem.

Příklad

Podívejte se na příklad size , jak deklarovat a používat size_type.

stack

Vytvoří zásobník, který je prázdný nebo je kopií základní třídy kontejneru.

stack();

explicit stack(const container_type& right);

Parametry

right
Kontejner, jehož vytvořený zásobník má být kopií.

Příklad

// 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

Vrátí odkaz na prvek v horní části zásobníku.

reference top();

const_reference top() const;

Vrácená hodnota

Odkaz na poslední prvek v kontejneru v horní části zásobníku.

Poznámky

Aby se členová funkce použila, musí být zásobník nechtěný. Horní část zásobníku je pozice obsazená naposledy přidaným prvkem a je posledním prvkem na konci kontejneru.

Pokud je vrácená hodnota top přiřazena k objektu const_reference, stack nelze objekt změnit. Pokud je vrácená hodnota top přiřazena k objektu reference, stack lze objekt upravit.

Příklad

// 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, který představuje typ objektu uložený jako prvek v zásobníku.

typedef typename Container::value_type value_type;

Poznámky

Typ je synonymem základního value_type kontejneru přizpůsobeného zásobníkem.

Příklad

// 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.

Viz také

Bezpečný přístup z více vláken ve standardní knihovně C++
Standardní knihovna C++ – referenční dokumentace