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 avector
třídu nebo jakýkoli jiný sekvencí kontejner, který podporuje operace back
, push_back
a 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ímustack
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 furqueue
.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
Název | Popis |
---|---|
stack |
stack Vytvoří prázdný objekt kontejneru nebo kopii základního objektu kontejneru. |
Typedefs
Název | 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
Název | 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 Container
v čá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;
Návratová 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;
Návratová 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;
Návratová 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