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.
Desafio
FácilCrie 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
nrepresentando o número de elementos a serem adicionados inicialmente ao vetor - Em seguida,
nnúmeros inteiros a serem inseridos no vetor - 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 vetor
Seu programa deve:
- Criar um
std::vector<int>vazio - Ler o número de elementos a serem adicionados e inseri-los no vetor usando
.push_back() - Imprimir o tamanho inicial do vetor após todas as inserções
- Ler o número de elementos a serem removidos
- Para cada elemento a ser removido, use
std::find()para localizá-lo e, em seguida, use.erase()para removê-lo, se encontrado - Após cada tentativa de remoção, imprima o tamanho atual do vetor
- 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;
}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 Tarefa