Menu
CoddyTech

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 vettore quando non servono più. Per i vettori, devi usare un iteratore con il metodo .erase(). Puoi combinare std::find() con .erase() per rimuovere elementi in base al valore.

Ecco come rimuovere un elemento da un vettore. std::find() proviene dall'header <algorithm>, quindi includilo insieme a <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);  // 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 rimuovere un elemento che non esiste, find() restituirà end() e controllare questo valore previene gli errori.

Questo schema rende la rimozione degli elementi sicura e prevedibile. È particolarmente utile per gestire raccolte dinamiche in cui devi rimuovere elementi specifici in base all'input dell'utente o alla logica del programma. Ricordati 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() insieme a 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 è stato trovato
  6. Dopo ogni tentativo di rimozione, stampare la dimensione corrente del vector
  7. Infine, iterare sugli elementi rimanenti nel vector e stamparli in ordine

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() {
    // Leggi il numero di elementi da aggiungere
    int n;
    cin >> n;
    
    // Crea un vettore vuoto
    vector<int> myVector;
    
    // Leggi e inserisci n elementi
    for (int i = 0; i < n; i++) {
        int element;
        cin >> element;
        // Inserisci l'elemento nel vettore
    }
    
    // Leggi il numero di elementi da rimuovere
    int m;
    cin >> m;
    
    // TODO: Scrivi il tuo codice qui sotto
    // 1. Stampa la dimensione iniziale del vettore
    // 2. Per ogni elemento da rimuovere, trovalo, usa .erase() e stampa la dimensione dopo ogni rimozione
    // 3. Stampa gli elementi rimanenti nel vettore
    
    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