Menu
Coddy logo textTech

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 20

Apó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.

challenge icon

Desafio

Fácil

Crie 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 n representando o número de elementos a serem adicionados inicialmente ao conjunto
  • Em seguida, n números inteiros a serem inseridos no conjunto
  • Um número inteiro m representando o número de elementos a serem removidos
  • Em seguida, m números inteiros representando os elementos a serem removidos do conjunto

Seu programa deve:

  1. Criar um std::set<int> vazio
  2. Ler o número de elementos a serem adicionados e inseri-los no conjunto usando .insert()
  3. Imprimir o tamanho inicial do conjunto após todas as inserções
  4. Ler o número de elementos a serem removidos
  5. Para cada elemento a ser removido, use .erase() para tentar a remoção
  6. Após cada tentativa de remoção, imprima o tamanho atual do conjunto
  7. 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.

Folha de consulta

Use .erase() para remover um elemento específico de um conjunto (set) fornecendo seu valor:

std::set<int> numbers = {10, 20, 30, 40};
numbers.erase(20);  // Remove o elemento 20

Se você tentar apagar um elemento que não existe no conjunto, nada acontece - o conjunto permanece inalterado e nenhum erro ocorre, tornando o .erase() seguro para usar.

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;
}
quiz iconTeste seus conhecimentos

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