Empilhar em C++ STL com exemplo
O que é std::stack?
Uma pilha é uma estrutura de dados que opera com base na técnica LIFO (Last In First Out). O std::stack permite que elementos sejam adicionados e removidos apenas de uma extremidade.
A classe std::stack é um adaptador de contêiner. Objetos de contêiner contêm dados de um tipo de dados semelhante. Você pode criar uma pilha de vários contêineres de sequência. Se nenhum container for fornecido, o container deque será usado por padrão. Os adaptadores de contêiner não oferecem suporte a iteradores, portanto, não podem ser usados para manipular dados.
Neste tutorial de C++, você aprenderá
- O que é std::stack?
- Sintaxe da pilha
- Tipos de membros
- Operações na pilha
- Implementação de pilha
- push() e pop()
- vazio(), tamanho(), topo()
- emplace() e swap()
- Pilha em STL
Sintaxe da pilha
Para criar uma pilha, devemos incluir o arquivo de cabeçalho
template <class Type, class Container = deque<Type> > class stack;
- Tipo – é o tipo de elemento contido no std::stack. Pode ser qualquer tipo C++ válido ou até mesmo um tipo definido pelo usuário.
- Contêiner – é o tipo de objeto de contêiner subjacente.
Tipos de membros
Aqui estão os tipos de membros da pilha:
- value_type- O primeiro parâmetro do template, T. Ele denota os tipos de elementos.
- container_type- O segundo parâmetro de modelo, Container. Denota o tipo de contêiner subjacente.
- size_type- Tipo integral não assinado.
Operações na pilha
Uma pilha C++ suporta as seguintes operações básicas:
- push – Adiciona/empurra um item para a pilha.
- pop – Remove/remove um item da pilha.
- peek – Retorna o item do topo da pilha sem removê-lo.
- isFull – Verifica se uma pilha está cheia.
- isEmpty – Verifica se uma pilha está vazia.
Implementação da pilha
Etapa 1) Inicialmente temos uma pilha vazia. O topo de uma pilha vazia é definido como -1.
Etapa 2) Em seguida, colocamos o elemento 5 na pilha. O topo da pilha apontará para o elemento 5.
Etapa 3) Em seguida, colocamos o elemento 50 na pilha. O topo da pilha se desloca e aponta para o elemento 50.
Etapa 4) Em seguida, realizamos uma operação pop, removendo o elemento do topo da pilha. O elemento 50 é retirado da pilha. O topo da pilha agora aponta para o elemento 5.
push() e pop()
As funções stack::push() adicionam um novo item ao topo da pilha. O tamanho da pilha é aumentado em 1 após a inserção. A função usa esta sintaxe:
stack.push(value)
O valor é o item a ser inserido na pilha.
A função stack::pop() remove o elemento do topo da pilha. Este é o item mais novo da pilha. O tamanho da pilha é reduzido em 1 após a remoção. Aqui está a sintaxe da função:
stack.pop()
A função não recebe parâmetros.
Exemplo 1:
#include <iostream> #include <stack> using namespace std; int main() { stack<int> st; st.push(10); st.push(20); st.push(30); st.push(40); st.pop(); st.pop(); while (!st.empty()) { cout << ' ' << st.top(); st.pop(); } }
Saída:
Aqui está uma captura de tela do código:
Explicação do código:
- Inclua o arquivo de cabeçalho iostream em nosso código para usar suas funções.
- Inclua o arquivo de cabeçalho da pilha em nosso código para usar suas funções.
- Inclua o namespace std em nosso código para usar suas classes sem chamá-lo.
- Chame a função main(). A lógica do programa deve ser adicionada dentro desta função.
- Crie uma pilha st para armazenar valores inteiros.
- Use a função push() para inserir o valor 10 na pilha.
- Use a função push() para inserir o valor 20 na pilha.
- Use a função push() para inserir o valor 30 na pilha.
- Use a função push() para inserir o valor 40 na pilha.
- Use a função pop() para remover o elemento superior da pilha, ou seja, 40. O elemento superior agora se torna 30.
- Use a função pop() para remover o elemento superior da pilha, ou seja, 30. O elemento superior agora se torna 20.
- Use um loop while e uma função empty() para verificar se a pilha NÃO está vazia. O ! é o operador NOT.
- Imprimindo o conteúdo atual da pilha no console.
- Chame a função pop() na pilha.
- Fim do corpo do loop while.
- Fim do corpo da função main().
vazio(), tamanho(), topo()
As pilhas têm funções embutidas que você pode usar para brincar com a pilha e seus valores. Esses incluem:
- empty()- verifica se uma pilha está vazia ou não.
- size()- retorna o tamanho da pilha, ou seja, o número de elementos em uma pilha.
- top()- acessa o elemento da pilha no topo.
Exemplo 2:
#include <iostream> #include <stack> using namespace std; void createStack(stack <int> mystack) { stack <int> ms = mystack; while (!ms.empty()) { cout << '\t' << ms.top(); ms.pop(); } cout << '\n'; } int main() { stack <int> st; st.push(32); st.push(21); st.push(39); st.push(89); st.push(25); cout << "The stack st is: "; createStack(st); cout << "\n st.size() : " << st.size(); cout << "\n st.top() : " << st.top(); cout << "\n st.pop() : "; st.pop(); createStack(st); return 0; }
Saída:
Aqui está uma captura de tela do código:
Explicação do código:
- Inclua o arquivo de cabeçalho iostream em nosso código para usar suas funções.
- Inclua o arquivo de cabeçalho da pilha em nosso código para usar suas funções.
- Inclua o namespace std em nosso programa para usar suas classes sem chamá-lo.
- Crie a função createStack que podemos usar para criar a pilha mystack. A pilha conterá um conjunto de inteiros.
- O início do corpo da função createStack.
- Crie uma instância do tipo de dados mystack e dê a ela o nome ms.
- Use o loop while e a função empty() para verificar se a pilha está vazia.
- O início do corpo do loop while.
- Use a função top() armazenada no topo da pilha. O caractere \t criará uma nova guia.
- Use a função pop() para excluir o elemento no topo da pilha.
- Fim do corpo do loop while.
- Imprima uma linha em branco no console.
- Fim do corpo da função createStack.
- Chame a função main(). A lógica do programa deve ser adicionada ao corpo da função main().
- O início do corpo da função main().
- Crie um objeto de pilha st.
- Use a função push() para inserir o elemento 32 na pilha.
- Use a função push() para inserir o elemento 21 na pilha.
- Use a função push() para inserir o elemento 39 na pilha.
- Use a função push() para inserir o elemento 89 na pilha.
- Use a função push() para inserir o elemento 25 na pilha.
- Imprima algum texto no console.
- Chame a função createStack para executar as operações de inserção acima na pilha.
- Imprima o tamanho da pilha no console junto com outro texto.
- Imprima o elemento no topo da pilha no console.
- Imprima algum texto no console.
- Exclua o elemento no topo da pilha. Em seguida, ele retornará os elementos restantes na pilha.
- Chame a função createStack para executar as operações acima.
- O programa deve retornar o valor após a conclusão bem-sucedida.
- Fim do corpo da função main().
emplace() e swap()
Estas são outras funções de pilha embutidas:
- emplace()- constrói e insere um novo elemento no topo da pilha.
- swap()- troca o conteúdo da pilha com o conteúdo de outra pilha.
Exemplo 3:
#include <iostream> #include <stack> #include <cstdlib> using namespace std; int main() { stack<int> st1; stack<int> st2; st1.emplace(12); st1.emplace(19); st2.emplace(20); st2.emplace(23); st1.swap(st2); cout << "st1 = "; while (!st1.empty()) { cout << st1.top() << " "; st1.pop(); } cout << endl << "st2 = "; while (!st2.empty()) { cout << st2.top() << " "; st2.pop(); } }
Saída:
Aqui está uma captura de tela do código:
Explicação do código:
- Inclua o arquivo de cabeçalho iostream em nosso código para usar suas funções.
- Inclua o arquivo de cabeçalho da pilha em nosso código para usar suas funções.
- Inclua o arquivo de cabeçalho cstdlib em nosso código para usar suas funções.
- Inclua o namespace std em nosso código para usar suas classes sem chamá-lo.
- Chame a função main(). A lógica do programa será adicionada no corpo desta função.
- Declare uma pilha chamada st1 para armazenar valores inteiros.
- Declare uma pilha chamada st2 para armazenar valores inteiros.
- Use a função emplace() para inserir o inteiro 12 na pilha chamada st1.
- Use a função emplace() para inserir o inteiro 19 na pilha chamada st1.
- Use a função emplace() para inserir o inteiro 20 na pilha chamada st2.
- Use a função emplace() para inserir o inteiro 23 na pilha chamada st2.
- Use a função swap() para trocar o conteúdo das duas pilhas, st1 e st2. O conteúdo da pilha st1 deve ser movido para a pilha st2. O conteúdo da pilha st2 deve ser movido para a pilha st1.
- Imprima algum texto no console.
- Use a instrução while e a função empty() para verificar se a pilha st1 não está vazia.
- Imprima o conteúdo da pilha st1 no console. O ” ” adiciona espaço entre os elementos da pilha ao imprimi-los no console.
- Execute a função pop() na pilha st1 para remover o elemento superior.
- Fim do corpo da instrução while.
- Imprima algum texto no console. O endl é uma palavra-chave C++ para linha final. Ele move o cursor do mouse para a próxima linha para começar a imprimir a partir daí.
- Use a instrução while e a função empty() para verificar se a pilha st2 não está vazia.
- Imprima o conteúdo da pilha st2 no console. O ” ” adiciona espaço entre os elementos da pilha ao imprimi-los no console.
- Execute a função pop() na pilha st2 para remover o elemento superior.
- Fim do corpo da instrução while.
- Fim do corpo da função main().
Pilha em STL
A STL (Standard Template Library) vem com classes de modelo que fornecem estruturas de dados C++ comuns. Portanto, uma pilha também pode ser implementada em STL. Simplesmente incluímos essa biblioteca em nosso código e a usamos para definir uma pilha.
stack<T> st;
A sintaxe acima declara uma pilha st para elementos do tipo de dados T.
Exemplo 3:
#include <iostream> #include <stack> #include <cstdlib> using namespace std; int main() { stack<int> st; st.push(12); st.push(19); st.push(20); cout << st.top(); cout << st.size(); }
Saída:
Aqui está uma captura de tela do código:
Explicação do código:
- Inclua o arquivo de cabeçalho iostream em nosso código para usar suas funções.
- Inclua o arquivo de cabeçalho da pilha em nosso código para usar suas funções.
- Inclua o arquivo de cabeçalho cstdlib em nosso código para usar suas funções.
- Inclua o namespace std em nosso código para usar suas classes sem chamá-lo.
- Chame a função main(). A lógica do programa deve ser adicionada no corpo desta função.
- Declare uma pilha st para armazenar dados inteiros.
- Adicione o elemento 12 à pilha.
- Adicione o elemento 19 à pilha.
- Adicione o elemento 20 à pilha.
- Imprima o elemento no topo da pilha no console.
- Imprima o tamanho da pilha no console.
- Fim do corpo da função main().
Resumo:
- Uma pilha é uma estrutura de dados que opera com base na técnica LIFO (Last In first Out).
- O std::stack só permite que itens sejam adicionados e removidos de uma extremidade.
- A classe std::stack é um adaptador de contêiner, contendo itens de um tipo de dados semelhante.
- Uma pilha pode ser criada a partir de vários contêineres de sequência.
- Se você não fornecer um contêiner, o contêiner deque será usado por padrão.
- A função push() serve para inserir itens na pilha.
- A função pop() serve para remover o item superior da etapa.
- A função empty() serve para verificar se uma pilha está vazia ou não.
Linguagem C
- Operadores em C++ com Exemplo:O que é, Tipos e Programas
- C++ do… while loop com exemplos
- Instrução C++ Switch Case com EXEMPLO
- Alocação dinâmica de matrizes em C++ com exemplo
- Ponteiros C++ com exemplos
- Sobrecarga do operador C++ com exemplos
- Estrutura C++ com exemplo
- Mapa na biblioteca de modelos padrão C++ (STL) com exemplo de impressão
- std::list em C++ com exemplo
- Funções C++ com exemplos de programas