Menu
CoddyTech

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.

challenge icon

Desafío

Fácil

Crea 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 n que representa la cantidad de elementos que se añadirán inicialmente al vector
  • Después, n enteros que se insertarán en el vector
  • Un entero m que representa la cantidad de elementos que se eliminarán
  • Después, m enteros que representan los elementos que se eliminarán del vector

Tu programa debe:

  1. Crear un std::vector<int> vacío
  2. Leer la cantidad de elementos que se añadirán 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 que se eliminarán
  5. Para cada elemento que se eliminará, usar std::find() para localizarlo y luego usar .erase() para eliminarlo si se encuentra
  6. Después de cada intento de eliminación, imprimir el tamaño actual del vector
  7. 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;
}
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

Practica por tu cuenta: Compilador de C++ online