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.
Défi
FacileCré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
nreprésentant le nombre d'éléments à ajouter initialement au vecteur - Ensuite,
nentiers à insérer dans le vecteur - Un entier
mreprésentant le nombre d'éléments à supprimer - Ensuite,
mentiers représentant les éléments à supprimer du vecteur
Votre programme doit :
- Créer un
std::vector<int>vide - Lire le nombre d'éléments à ajouter et les insérer dans le vecteur en utilisant
.push_back() - Afficher la taille initiale du vecteur après toutes les insertions
- Lire le nombre d'éléments à supprimer
- Pour chaque élément à supprimer, utiliser
std::find()pour le localiser, puis utiliser.erase()pour le supprimer s'il est trouvé - Après chaque tentative de suppression, afficher la taille actuelle du vecteur
- 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;
}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
1Pointeurs et mémoire
Qu'est-ce qu'un pointeur ?Opérateur d'adresseOpérateur de déréférencementPointeurs nulsPointeurs et tableauxMémoire dynamique avec 'new'Libérer la mémoire avec 'delete'Récapitulatif - Pratique des pointeurs2Vecteurs (Tableaux dynamiques)
Introduction à std::vectorCréer un vecteurAjouter des élémentsAccéder aux élémentsTaille d'un vecteurItérer avec une boucle ForBoucle For basée sur l'intervalleSupprimer des élémentsRécapitulatif - Opérations sur les vecteurs3Projet : Outil de liste de tâches
Présentation du projetAjouter une tâche