Classe stack
Uma classe do adaptador de contêiner de modelo que fornece uma restrição de funcionalidade que limita o acesso ao elemento mais recentemente adicionado a alguns tipos de contêiner subjacentes. A classe stack
é usada quando é importante esclarecer que apenas as operações stack
estão sendo executadas no contêiner.
Sintaxe
template <class Type, class Container= deque <Type>>
class stack
Parâmetros
Type
O tipo de dados do elemento a ser armazenado na stack.
Container
O tipo do contêiner subjacente usado para implementar a stack. O valor padrão é a classe deque<Type>
.
Comentários
Os elementos da classe Type
estipulados no primeiro parâmetro de modelo de um objeto de pilha são sinônimo de value_type
e devem corresponder ao tipo de elemento na classe de contêiner subjacente Container
estipulada pelo segundo parâmetro de modelo. O Type
deve ser atribuível, para que seja possível copiar objetos desse tipo e atribuir valores a variáveis desse tipo.
As classes de contêiner subjacente adequadas para a pilha incluem as classes deque
, list
e vector
ou qualquer outro contêiner de sequência que dê suporte às operações de back
, push_back
e pop_back
. A classe de contêiner subjacente é encapsulada dentro do adaptador do contêiner, que expõe apenas o conjunto limitado de funções membro de contêiner de sequência como uma interface pública.
A igualdade dos objetos de stack
será comparável somente se a igualdade dos elementos da classe Type
for comparável, e serão comparáveis em menor-que somente se os elementos da classe Type
forem comparáveis em menor-que.
A classe
stack
dá suporte a uma estrutura de dados UEPS (último a entrar, primeiro a sair). Uma boa comparação é pensar em uma pilha de pratos. Os elementos (os pratos) podem inseridos, inspecionados ou removidos somente da parte superior da pilha, que é o último elemento no final do contêiner base. A restrição para acessar apenas o elemento superior é o motivo para usar a classestack
.A classe
queue
dá suporte a uma estrutura de dados PEPS (primeiro a entrar, primeiro a sair). Uma boa comparação é pensar em uma fila de banco. Os elementos (as pessoas) vão sendo adicionados na parte final da fila e são removidos do início dela. Tanto o início quanto o final da fila podem ser inspecionados. A restrição de acessar apenas os elementos inicial e final dessa maneira é o motivo para usar a classequeue
.A classe
priority_queue
ordena seus elementos para que o elemento maior sempre esteja na posição superior. Ele dá suporte à inserção de um elemento e a inspeção e remoção do elemento superior. Uma boa comparação é pensar em pessoas em fila organizadas por idade, altura ou algum outro critério.
Membros
Construtores
Nome | Descrição |
---|---|
stack |
Constrói um stack que é vazio ou que é uma cópia de um objeto de contêiner base. |
Typedefs
Nome | Descrição |
---|---|
container_type |
Um tipo que fornece o contêiner base para ser adaptado por um stack . |
size_type |
Um tipo de inteiro sem sinal que pode representar o número de elementos em um stack . |
value_type |
Um tipo que representa o tipo de objeto armazenado como um elemento em um stack . |
Funções
Nome | Descrição |
---|---|
empty |
Testa se stack está vazio. |
pop |
Remove o elemento da parte superior do stack . |
push |
Adiciona um elemento ao topo do stack . |
size |
Retorna o número de elementos no stack . |
top |
Retorna uma referência a um elemento na parte superior do stack . |
container_type
Um tipo que fornece o contêiner base a ser adaptado.
typedef Container container_type;
Comentários
O tipo é um sinônimo do parâmetro de modeloContainer
. As três classes de contêiner da sequência da Biblioteca Padrão C++, vector
, list
e a classe deque
padrão, atendem aos requisitos para serem usadas como o contêiner base para um objeto stack
. Tipos definidos pelo usuário que satisfazem esses requisitos também podem ser usados.
Para obter mais informações sobre Container
, consulte a seção Comentários do tópico stack
Classe .
Exemplo
Veja o exemplo de stack::stack
que demonstra como declarar e usar container_type
.
empty
Testa se uma stack está vazia.
bool empty() const;
Valor de retorno
true
se a pilha estiver vazia; false
se a pilha não estiver vazia.
Exemplo
// 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
Remove o elemento da parte superior da stack.
void pop();
Comentários
A stack não pode estar vazia para que seja possível aplicar a função membro. O início da stack é a posição ocupada pelo elemento adicionado mais recentemente e é o último elemento no fim do contêiner.
Exemplo
// 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
Adiciona um elemento ao topo da pilha.
void push(const Type& val);
Parâmetros
val
O elemento adicionado à parte superior da stack.
Comentários
O início da stack é a posição ocupada pelo elemento adicionado mais recentemente e é o último elemento no fim do contêiner.
Exemplo
// 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
Retorna o número de elementos na stack.
size_type size() const;
Valor de retorno
O comprimento atual da stack.
Exemplo
// 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
Um tipo de inteiro sem sinal que pode representar o número de elementos em uma stack.
typedef typename Container::size_type size_type;
Comentários
O tipo é um sinônimo de size_type
do contêiner base adaptado pela stack.
Exemplo
Veja o exemplo de size
que demonstra como declarar e usar size_type
.
stack
Constrói uma stack que é vazia ou que é uma cópia de uma classe de contêiner base.
stack();
explicit stack(const container_type& right);
Parâmetros
right
O contêiner do qual a stack construída será uma cópia.
Exemplo
// 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
Retorna uma referência a um elemento na parte superior da stack.
reference top();
const_reference top() const;
Valor de retorno
Uma referência ao último elemento no contêiner na parte superior da stack.
Comentários
A stack não pode estar vazia para que seja possível aplicar a função membro. O início da stack é a posição ocupada pelo elemento adicionado mais recentemente e é o último elemento no fim do contêiner.
Se o valor retornado de top
for atribuído a const_reference
, o objeto stack
não poderá ser modificado. Se o valor retornado de top
for atribuído a um reference
, o objeto stack
poderá ser modificado.
Exemplo
// 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
Um tipo que representa o tipo de objeto armazenado como um elemento em uma stack.
typedef typename Container::value_type value_type;
Comentários
O tipo é um sinônimo de value_type
do contêiner base adaptado pela stack.
Exemplo
// 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.
Confira também
Acesso Thread-Safe na Biblioteca Padrão C++
Referência da biblioteca padrão C++