Menu
Coddy logo textTech

Supprimer des éléments

Fait partie de la section Logique et Flux du Journey C++ de Coddy — leçon 16 sur 56.

Parfois, vous devez supprimer des éléments d'un vecteur lorsqu'ils ne sont plus nécessaires. Les vecteurs exigent que vous utilisiez un itérateur avec la méthode .erase(). Vous pouvez combiner std::find() avec .erase() pour supprimer des éléments par valeur.

Voici comment supprimer un élément d'un vecteur :

std::vector<int> numbers = {10, 20, 30, 40};
auto it = std::find(numbers.begin(), numbers.end(), 20);
if (it != numbers.end()) {
    numbers.erase(it);  // Supprime l'élément à la position de l'itérateur
}

Après avoir appelé erase(), l'élément à cette position est supprimé et tous les éléments suivants sont décalés vers le bas. Si vous essayez de trouver et de supprimer un élément qui n'existe pas, find() retournera end(), et vérifier cela permet d'éviter des erreurs.

Ce modèle rend la suppression d'éléments sûre et prévisible. Il est particulièrement utile pour maintenir des collections dynamiques où vous devez supprimer des éléments spécifiques en fonction de l'entrée de l'utilisateur ou de la logique du programme. N'oubliez pas de toujours vérifier si l'itérateur est valide avant l'effacement.

challenge icon

Défi

Facile

Créez un programme qui démontre la suppression d'éléments d'un std::vector en utilisant la méthode .erase() combinée avec std::find(). Ce défi testera votre compréhension de la manière de supprimer en toute sécurité des éléments spécifiques d'un vecteur et d'observer les résultats.

Les entrées suivantes seront fournies :

  • Un entier n représentant le nombre d'éléments à ajouter initialement au vecteur
  • Ensuite, n entiers à insérer dans le vecteur
  • Un entier m représentant le nombre d'éléments à supprimer
  • Ensuite, m entiers représentant les éléments à supprimer du vecteur

Votre programme doit :

  1. Créer un std::vector<int> vide
  2. Lire le nombre d'éléments à ajouter et les insérer dans le vecteur en utilisant .push_back()
  3. Afficher la taille initiale du vecteur après toutes les insertions
  4. Lire le nombre d'éléments à supprimer
  5. Pour chaque élément à supprimer, utiliser std::find() pour le localiser, puis utiliser .erase() pour le supprimer s'il est trouvé
  6. Après chaque tentative de suppression, afficher la taille actuelle du vecteur
  7. Enfin, parcourir les éléments restants dans le vecteur et les afficher dans l'ordre

Utilisez le format de sortie exact suivant :

Taille initiale du vecteur :

Initial size: [size]

Après chaque tentative de suppression :

After removing [number]: size = [current_size]

Éléments restants finaux :

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

N'oubliez pas que .erase() nécessite un itérateur, vous devez donc d'abord utiliser std::find() pour localiser l'élément. Vérifiez toujours si l'élément a été trouvé avant de l'effacer. Utilisez une boucle for basée sur une plage (range-based for loop) pour afficher les éléments restants dans leur ordre actuel.

Aide-mémoire

Utilisez std::find() combiné avec .erase() pour supprimer un élément spécifique d'un vecteur :

std::vector<int> numbers = {10, 20, 30, 40};
auto it = std::find(numbers.begin(), numbers.end(), 20);
if (it != numbers.end()) {
    numbers.erase(it);  // Supprime l'élément à la position de l'itérateur
}

Vérifiez toujours si l'itérateur n'est pas égal à end() avant d'effacer pour éviter un comportement indéfini. La méthode .erase() nécessite un itérateur, pas une valeur directement.

Essayez vous-même

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

int main() {
    // Lire le nombre d'éléments à ajouter
    int n;
    cin >> n;
    
    // Créer un vecteur vide
    vector<int> myVector;
    
    // Lire et insérer n éléments
    for (int i = 0; i < n; i++) {
        int element;
        cin >> element;
        // Insérer l'élément dans le vecteur
    }
    
    // Lire le nombre d'éléments à supprimer
    int m;
    cin >> m;
    
    // TODO: Écrivez votre code ci-dessous
    // 1. Afficher la taille initiale du vecteur
    // 2. Pour chaque élément à supprimer, le trouver et utiliser .erase() et afficher la taille après chaque suppression
    // 3. Afficher les éléments restants dans le vecteur
    
    return 0;
}
quiz iconTestez-vous

Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.

Toutes les leçons de Logique et Flux