Removendo Elementos
Parte da seção Lógica & Fluxo do Journey de C++ da Coddy — lição 38 de 56.
Às vezes, você precisa remover elementos de um conjunto quando eles não são mais necessários. O método .erase() permite que você remova um elemento específico fornecendo seu valor.
Veja como remover um elemento de um set:
std::set<int> numbers = {10, 20, 30, 40};
numbers.erase(20); // Remove o elemento 20Após chamar .erase(20), o conjunto conterá apenas {10, 30, 40}. Se você tentar apagar um elemento que não existe no conjunto, nada acontece - o conjunto permanece inalterado e nenhum erro ocorre.
Isso torna o .erase() seguro de usar mesmo quando você não tem certeza de que o elemento existe. É particularmente útil para manter coleções limpas, onde você precisa remover itens específicos com base na entrada do usuário ou na lógica do programa.
Desafio
FácilCrie um programa que demonstre a remoção de elementos de um std::set usando o método .erase(). Este desafio testará sua compreensão de como remover elementos específicos de um conjunto com segurança e observar os resultados.
As seguintes entradas serão fornecidas:
- Um número inteiro
nrepresentando o número de elementos a serem adicionados inicialmente ao conjunto - Em seguida,
nnúmeros inteiros a serem inseridos no conjunto - Um número inteiro
mrepresentando o número de elementos a serem removidos - Em seguida,
mnúmeros inteiros representando os elementos a serem removidos do conjunto
Seu programa deve:
- Criar um
std::set<int>vazio - Ler o número de elementos a serem adicionados e inseri-los no conjunto usando
.insert() - Imprimir o tamanho inicial do conjunto após todas as inserções
- Ler o número de elementos a serem removidos
- Para cada elemento a ser removido, use
.erase()para tentar a remoção - Após cada tentativa de remoção, imprima o tamanho atual do conjunto
- Finalmente, itere pelos elementos restantes no conjunto e imprima-os em ordem crescente
Use o seguinte formato de saída exato:
Tamanho inicial do conjunto:
Initial size: [size]Após cada tentativa de remoção:
After removing [number]: size = [current_size]Elementos finais restantes:
Remaining elements: [element1] [element2] [element3] ...Lembre-se de que o .erase() lida com segurança com tentativas de remover elementos que não existem no conjunto - o conjunto permanece inalterado e nenhum erro ocorre. Use um loop for baseado em intervalo (range-based for loop) para imprimir os elementos restantes, e eles serão exibidos automaticamente em ordem crescente, já que os conjuntos mantêm seus elementos em sequência ordenada.
Experimente você mesmo
#include <iostream>
#include <set>
using namespace std;
int main() {
// Ler o número de elementos a adicionar
int n;
cin >> n;
// Criar um conjunto vazio
set<int> mySet;
// Ler e inserir n elementos
for (int i = 0; i < n; i++) {
int element;
cin >> element;
// Inserir elemento no conjunto
}
// Ler o número de elementos a remover
int m;
cin >> m;
// TODO: Escreva seu código abaixo
// 1. Imprimir o tamanho inicial do conjunto
// 2. Para cada elemento a remover, use .erase() e imprima o tamanho após cada remoção
// 3. Imprimir os elementos restantes no conjunto
return 0;
}Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.
Todas as lições de Lógica & Fluxo
1Ponteiros e Memória
O que é um Ponteiro?Operador de EndereçoOperador de DesreferenciaçãoPonteiros NulosPonteiros e ArraysMemória Dinâmica com 'new'Liberando Memória com 'delete'Recapitulação - Prática com Ponteiros2Vetores (Arrays Dinâmicos)
Introdução ao std::vectorCriando um VetorAdicionando ElementosAcessando ElementosTamanho do VetorIterando com um Loop ForLoop For Baseado em IntervaloRemovendo ElementosRecapitulação - Operações com Vetores3Projeto: Ferramenta de Lista de Tarefas
Visão Geral do ProjetoAdicionando uma Tarefa6Conjuntos (Elementos Únicos)
Apresentando o std::setCriar Conjunto e Adicionar ElementosVerificando ElementosRemovendo ElementosIterando sobre um ConjuntoRecapitulação - Números Únicos