Menu
Coddy logo textTech

Rimuovere elementi

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

A volte devi rimuovere elementi da un insieme quando non servono più. Il metodo .erase() ti consente di rimuovere un elemento specifico fornendone il valore.

Ecco come rimuovere un elemento da un insieme:

std::set<int> numbers = {10, 20, 30, 40};
numbers.erase(20);  // Rimuove l'elemento 20

Dopo aver chiamato .erase(20), l'insieme conterrà solo {10, 30, 40}. Se provi a rimuovere un elemento che non esiste nell'insieme, non succede nulla: l'insieme rimane invariato e non si verifica alcun errore.

Questo rende .erase() sicuro da usare anche quando non sei certo che l'elemento esista. È particolarmente utile per mantenere raccolte ordinate quando devi rimuovere elementi specifici in base all'input dell'utente o alla logica del programma.

challenge icon

Sfida

Facile

Crea un programma che dimostri come rimuovere elementi da un std::set usando il metodo .erase(). Questa sfida metterà alla prova la tua comprensione di come rimuovere in modo sicuro elementi specifici da un insieme e osservarne i risultati.

Verranno forniti i seguenti input:

  • Un intero n che rappresenta il numero di elementi da aggiungere inizialmente all’insieme
  • Poi n interi da inserire nell’insieme
  • Un intero m che rappresenta il numero di elementi da rimuovere
  • Poi m interi che rappresentano gli elementi da rimuovere dall’insieme

Il programma dovrebbe:

  1. Creare un std::set<int> vuoto
  2. Leggere il numero di elementi da aggiungere e inserirli nell’insieme usando .insert()
  3. Stampare la dimensione iniziale dell’insieme dopo tutti gli inserimenti
  4. Leggere il numero di elementi da rimuovere
  5. Per ogni elemento da rimuovere, usare .erase() per tentare di rimuoverlo
  6. Dopo ogni tentativo di rimozione, stampare la dimensione corrente dell’insieme
  7. Infine, scorrere gli elementi rimanenti nell’insieme e stamparli in ordine crescente

Usa esattamente il seguente formato di output:

Dimensione iniziale dell’insieme:

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() gestisce in modo sicuro i tentativi di rimuovere elementi che non esistono nell’insieme: l’insieme rimane invariato e non si verifica alcun errore. Usa un ciclo for basato su intervallo per stampare gli elementi rimanenti: verranno visualizzati automaticamente in ordine crescente, poiché gli insiemi mantengono gli elementi in sequenza ordinata.

Provalo tu

#include <iostream>
#include <set>
using namespace std;

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