Eliminar elementos
Parte de la sección Lógica y Flujo del Journey de C++ de Coddy. Lección 16 de 56.
A veces necesitas eliminar elementos de un vector cuando ya no los necesitas. Los vectores requieren que uses un iterador con el método .erase(). Puedes combinar std::find() con .erase() para eliminar elementos por valor.
A continuación se muestra cómo eliminar un elemento de un vector. std::find() proviene del encabezado <algorithm>, así que inclúyelo junto con <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); // Elimina el elemento en la posición del iterador
}Después de llamar a erase(), se elimina el elemento en esa posición y todos los elementos posteriores se desplazan hacia abajo. Si intentas buscar y eliminar un elemento que no existe, find() devolverá end(), y comprobar esto evita errores.
Este patrón hace que la eliminación de elementos sea segura y predecible. Es especialmente útil para mantener colecciones dinámicas en las que necesitas eliminar elementos específicos según la entrada del usuario o la lógica del programa. Recuerda comprobar siempre si el iterador es válido antes de borrar.
Desafío
FácilCrea un programa que demuestre cómo eliminar elementos de un std::vector usando el método .erase() combinado con std::find(). Este desafío pondrá a prueba tu comprensión de cómo eliminar de forma segura elementos específicos de un vector y observar los resultados.
Se proporcionarán las siguientes entradas:
- Un entero
nque representa la cantidad de elementos que se añadirán inicialmente al vector - Después,
nenteros que se insertarán en el vector - Un entero
mque representa la cantidad de elementos que se eliminarán - Después,
menteros que representan los elementos que se eliminarán del vector
Tu programa debe:
- Crear un
std::vector<int>vacío - Leer la cantidad de elementos que se añadirán e insertarlos en el vector usando
.push_back() - Imprimir el tamaño inicial del vector después de todas las inserciones
- Leer la cantidad de elementos que se eliminarán
- Para cada elemento que se eliminará, usar
std::find()para localizarlo y luego usar.erase()para eliminarlo si se encuentra - Después de cada intento de eliminación, imprimir el tamaño actual del vector
- Por último, recorrer los elementos restantes del vector e imprimirlos en orden
Usa exactamente el siguiente formato de salida:
Tamaño inicial del vector:
Initial size: [size]Después de cada intento de eliminación:
After removing [number]: size = [current_size]Elementos restantes al final:
Remaining elements: [element1] [element2] [element3] ...Recuerda que .erase() requiere un iterador, así que primero debes usar std::find() para localizar el elemento. Comprueba siempre si se encontró el elemento antes de eliminarlo. Usa un bucle for basado en rango para imprimir los elementos restantes en el orden en que se encuentran.
Pruébalo tú mismo
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int main() {
// Lee el número de elementos que se van a añadir
int n;
cin >> n;
// Crea un vector vacío
vector<int> myVector;
// Lee e inserta n elementos
for (int i = 0; i < n; i++) {
int element;
cin >> element;
// Inserta el elemento en el vector
}
// Lee el número de elementos que se van a eliminar
int m;
cin >> m;
// TODO: Escribe tu código a continuación
// 1. Imprime el tamaño inicial del vector
// 2. Para cada elemento que se va a eliminar, encuéntralo, usa .erase() e imprime el tamaño después de cada eliminación
// 3. Imprime los elementos restantes del vector
return 0;
}Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.
Todas las lecciones de Lógica y Flujo
1Punteros y memoria
¿Qué es un puntero?Operador de direcciónOperador de desreferenciaPunteros nulosPunteros y arraysMemoria dinámica con 'new'Liberar memoria con 'delete'Resumen: Práctica de punteros2Vectores (Arrays dinámicos)
Introducción a std::vectorCreación de un VectorAgregar elementosAcceder a los elementosTamaño del VectorIterar con un bucle ForBucle For basado en rangosEliminar elementosResumen - Operaciones con Vectores5Proyecto: Herramienta de inventario
Configuración del proyectoAgregar y actualizar artículos3Proyecto: Herramienta de lista de tareas
Descripción general del proyectoAñadir una tareaPractica por tu cuenta: Compilador de C++ online