Menu
Coddy logo textTech

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 son necesarios. Los vectores requieren que uses un iterador con el método .erase(). Puedes combinar std::find() con .erase() para eliminar elementos por valor.

Aquí tienes cómo eliminar un elemento de un 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(), el elemento en esa posición se elimina 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 particularmente útil para mantener colecciones dinámicas donde necesites eliminar elementos específicos basados en la entrada del usuario o la lógica del programa. Recuerda comprobar siempre si el iterador es válido antes de borrar.

challenge icon

Desafío

Fácil

Crea un programa que demuestre cómo eliminar elementos de un std::vector utilizando el método .erase() combinado con std::find(). Este desafío pondrá a prueba tu comprensión sobre cómo eliminar de forma segura elementos específicos de un vector y observar los resultados.

Se proporcionarán las siguientes entradas:

  • Un número entero n que representa la cantidad de elementos que se añadirán inicialmente al vector
  • Luego, n números enteros para ser insertados en el vector
  • Un número entero m que representa la cantidad de elementos a eliminar
  • Luego, m números enteros que representan los elementos a eliminar del vector

Tu programa debe:

  1. Crear un std::vector<int> vacío
  2. Leer la cantidad de elementos a añadir e insertarlos en el vector usando .push_back()
  3. Imprimir el tamaño inicial del vector después de todas las inserciones
  4. Leer la cantidad de elementos a eliminar
  5. Para cada elemento a eliminar, usa std::find() para localizarlo, luego usa .erase() para eliminarlo si se encuentra
  6. Después de cada intento de eliminación, imprime el tamaño actual del vector
  7. Finalmente, itera a través de los elementos restantes en el vector e imprímelos en orden

Utiliza el siguiente formato de salida exacto:

Tamaño inicial del vector:

Initial size: [size]

Después de cada intento de eliminación:

After removing [number]: size = [current_size]

Elementos finales restantes:

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

Recuerda que .erase() requiere un iterador, por lo que primero debes usar std::find() para localizar el elemento. Siempre verifica si el elemento fue encontrado antes de borrarlo. Usa un bucle for basado en rangos (range-based for loop) para imprimir los elementos restantes en su orden actual.

Hoja de referencia

Usa std::find() combinado con .erase() para eliminar un elemento específico de un 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
}

Comprueba siempre si el iterador no es igual a end() antes de borrar para evitar un comportamiento indefinido. El método .erase() requiere un iterador, no un valor directamente.

Pruébalo tú mismo

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

int main() {
    // Leer el número de elementos a añadir
    int n;
    cin >> n;
    
    // Crear un vector vacío
    vector<int> myVector;
    
    // Leer e insertar n elementos
    for (int i = 0; i < n; i++) {
        int element;
        cin >> element;
        // Insertar elemento en el vector
    }
    
    // Leer el número de elementos a eliminar
    int m;
    cin >> m;
    
    // TODO: Escribe tu código abajo
    // 1. Imprimir el tamaño inicial del vector
    // 2. Para cada elemento a eliminar, búscalo y usa .erase() e imprime el tamaño después de cada eliminación
    // 3. Imprimir los elementos restantes en el vector
    
    return 0;
}
quiz iconPonte a prueba

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