Menu
Coddy logo textTech

Rimuovere elementi

Fa parte della sezione Logica e flusso del percorso C++ di Coddy. Lezione 16 di 56.

A volte devi rimuovere elementi da un vector quando non ti servono più. Per usare il metodo .erase() con i vector, devi usare un iteratore. Puoi combinare std::find() con .erase() per rimuovere elementi in base al valore.

Ecco come rimuovere un elemento da un vettore:

std::vector<int> numbers = {10, 20, 30, 40};
auto it = std::find(numbers.begin(), numbers.end(), 20);
if (it != numbers.end()) {
    numbers.erase(it);  // Rimuove l'elemento nella posizione dell'iteratore
}

Dopo aver chiamato erase(), l’elemento in quella posizione viene rimosso e tutti gli elementi successivi si spostano verso il basso. Se provi a trovare e cancellare un elemento che non esiste, find() restituirà end() e verificare questa condizione previene gli errori.

Questo schema rende la rimozione degli elementi sicura e prevedibile. È particolarmente utile per gestire collezioni dinamiche in cui devi rimuovere elementi specifici in base all'input dell'utente o alla logica del programma. Ricorda di controllare sempre che l'iteratore sia valido prima di cancellare.

challenge icon

Sfida

Facile

Crea un programma che dimostri la rimozione di elementi da un std::vector usando il metodo .erase() combinato con std::find(). Questa sfida metterà alla prova la tua comprensione di come rimuovere in modo sicuro elementi specifici da un vector e osservare i risultati.

Verranno forniti i seguenti input:

  • Un intero n che rappresenta il numero di elementi da aggiungere inizialmente al vector
  • Poi n interi da inserire nel vector
  • Un intero m che rappresenta il numero di elementi da rimuovere
  • Poi m interi che rappresentano gli elementi da rimuovere dal vector

Il tuo programma dovrebbe:

  1. Creare un std::vector<int> vuoto
  2. Leggere il numero di elementi da aggiungere e inserirli nel vector usando .push_back()
  3. Stampare la dimensione iniziale del vector dopo tutti gli inserimenti
  4. Leggere il numero di elementi da rimuovere
  5. Per ogni elemento da rimuovere, usare std::find() per individuarlo, quindi usare .erase() per rimuoverlo se trovato
  6. Dopo ogni tentativo di rimozione, stampare la dimensione corrente del vector
  7. Infine, iterare sugli elementi rimanenti nel vector e stamparli nell'ordine in cui si trovano

Usa il seguente formato di output esatto:

Dimensione iniziale del vector:

Initial size: [size]

Dopo ogni tentativo di rimozione:

After removing [number]: size = [current_size]

Elementi rimanenti finali:

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

Ricorda che .erase() richiede un iteratore, quindi devi prima usare std::find() per individuare l'elemento. Controlla sempre se l'elemento è stato trovato prima di rimuoverlo. Usa un ciclo for basato su intervallo per stampare gli elementi rimanenti nell'ordine in cui si trovano.

Provalo tu

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

int main() {
    // Lee la cantidad 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 la cantidad 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, búscalo, usa .erase() e imprime el tamaño después de cada eliminación
    // 3. Imprime los elementos restantes del vector
    
    return 0;
}
quiz iconMettiti alla prova

Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.

Tutte le lezioni di Logica e flusso

Esercitati da solo: Compilatore C++ online