Menu
CoddyTech

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 vetor. std::find() vem do cabeçalho <algorithm>, então inclua-o junto com <vector>:

#include <algorithm>
#include <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 nessa posição é removido e todos os elementos subsequentes avançam uma posição. Se você tentar encontrar e remover um elemento que não existe, find() retornará end(), e verificar isso evita erros.

Esse padrão torna a remoção de elementos segura e previsível. Ele é particularmente útil para manter coleções dinâmicas nas quais 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 com segurança elementos específicos de um vetor e observar os resultados.

As seguintes entradas serão fornecidas:

  • Um inteiro n que representa o número de elementos a serem adicionados inicialmente ao vetor
  • Em seguida, n inteiros a serem inseridos no vetor
  • Um inteiro m que representa o número de elementos a serem removidos
  • Em seguida, m inteiros que representam 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, usar std::find() para localizá-lo e, em seguida, usar .erase() para removê-lo se for encontrado
  6. Após cada tentativa de remoção, imprimir o tamanho atual do vetor
  7. Por fim, iterar pelos elementos restantes no vetor e imprimi-los na ordem

Use o seguinte formato exato de saída:

Tamanho inicial do vetor:

Initial size: [size]

Após cada tentativa de remoção:

After removing [number]: size = [current_size]

Elementos restantes ao final:

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

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

Experimente você mesmo

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

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

Pratique por conta própria: Compilador de C++ online