Menu
Coddy logo textTech

Removendo Elementos

Parte da seção Lógica & Fluxo do Journey de C++ da Coddy — lição 16 de 56.

Às vezes, você precisa remover elementos de um vetor quando eles não são mais necessários. Vetores exigem que você use um iterador com o método .erase(). Você pode combinar std::find() com .erase() para remover elementos por valor.

Veja como remover um elemento de um vector:

std::vector<int> numbers = {10, 20, 30, 40};
auto it = std::find(numbers.begin(), numbers.end(), 20);
if (it != numbers.end()) {
    numbers.erase(it);  // Remove o elemento na posição do iterador
}

Após chamar erase(), o elemento naquela posição é removido e todos os elementos subsequentes são deslocados para baixo. Se você tentar encontrar e apagar um elemento que não existe, find() retornará end(), e verificar isso evita erros.

Este padrão torna a remoção de elementos segura e previsível. É particularmente útil para manter coleções dinâmicas onde você precisa remover itens específicos com base na entrada do usuário ou na lógica do programa. Lembre-se de sempre verificar se o iterador é válido antes de apagar.

challenge icon

Desafio

Fácil

Crie um programa que demonstre a remoção de elementos de um std::vector usando o método .erase() combinado com std::find(). Este desafio testará sua compreensão de como remover elementos específicos de um vetor 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 vetor
  • Em seguida, n números inteiros a serem inseridos no vetor
  • 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 vetor

Seu programa deve:

  1. Criar um std::vector<int> vazio
  2. Ler o número de elementos a serem adicionados e inseri-los no vetor usando .push_back()
  3. Imprimir o tamanho inicial do vetor após todas as inserções
  4. Ler o número de elementos a serem removidos
  5. Para cada elemento a ser removido, use std::find() para localizá-lo e, em seguida, use .erase() para removê-lo, se encontrado
  6. Após cada tentativa de remoção, imprima o tamanho atual do vetor
  7. Por fim, itere pelos elementos restantes no vetor e imprima-os em ordem

Use o seguinte formato de saída exato:

Tamanho inicial do vetor:

Initial size: [size]

Após cada tentativa de remoção:

After removing [number]: size = [current_size]

Elementos restantes finais:

Remaining elements: [element1] [element2] [element3] ...

Lembre-se de que .erase() requer um iterador, portanto, você deve usar std::find() primeiro para localizar o elemento. Sempre verifique se o elemento foi encontrado antes de apagá-lo. Use um loop for baseado em intervalo (range-based for loop) para imprimir os elementos restantes em sua ordem atual.

Folha de consulta

Use std::find() combinado com .erase() para remover um elemento específico de um vetor:

std::vector<int> numbers = {10, 20, 30, 40};
auto it = std::find(numbers.begin(), numbers.end(), 20);
if (it != numbers.end()) {
    numbers.erase(it);  // Remove o elemento na posição do iterador
}

Sempre verifique se o iterador não é igual a end() antes de apagar para evitar comportamento indefinido. O método .erase() requer um iterador, não um valor diretamente.

Experimente você mesmo

#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;

int main() {
    // Ler o número de elementos a adicionar
    int n;
    cin >> n;
    
    // Criar um vetor vazio
    vector<int> myVector;
    
    // Ler e inserir n elementos
    for (int i = 0; i < n; i++) {
        int element;
        cin >> element;
        // Inserir elemento no vetor
    }
    
    // Ler o número de elementos a remover
    int m;
    cin >> m;
    
    // TODO: Escreva seu código abaixo
    // 1. Imprimir o tamanho inicial do vetor
    // 2. Para cada elemento a remover, encontre-o e use .erase() e imprima o tamanho após cada remoção
    // 3. Imprimir os elementos restantes no vetor
    
    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