Maison >développement back-end >C++ >Pouvez-vous supprimer des éléments d'un vecteur lors d'une boucle For basée sur une plage C 11 ?
Gestion des éléments vectoriels dans des boucles for basées sur une plage
En C 11, les boucles for basées sur une plage offrent un moyen pratique de parcourir les éléments d’un conteneur. Cependant, certaines opérations, telles que la suppression d'éléments d'un vecteur, deviennent problématiques au sein de ces boucles.
Des éléments peuvent-ils être supprimés d'un vecteur lors de boucles for basées sur une plage C 11 ?
Malheureusement non. Les boucles for basées sur une plage sont conçues pour une itération unique de chaque élément dans un conteneur. Ils ne conviennent pas pour modifier le conteneur lui-même, y compris supprimer des éléments.
Alternative pour la suppression d'éléments :
Pour supprimer des éléments d'un vecteur dans une boucle, vous devez utiliser la boucle for traditionnelle ou ses variantes. Ceux-ci permettent des modifications et des parcours non linéaires du conteneur.
Exemple :
auto i = std::begin(inv); while (i != std::end(inv)) { // Do some stuff if (blah) i = inv.erase(i); else ++i; }
En utilisant les fonctions std::begin et std::end, la boucle parcourt le vecteur à l'aide d'itérateurs. Lorsqu'un élément est marqué pour suppression, la fonction d'effacement est appelée, ce qui invalide l'itérateur pointant vers l'élément supprimé. La boucle continue ensuite en avançant l'itérateur.
En conclusion, bien que les boucles for basées sur une plage offrent une facilité d'utilisation pour les itérations en lecture seule, pour des opérations telles que la suppression d'éléments des vecteurs, vous devez utiliser des boucles for traditionnelles pour garder le contrôle sur la modification des conteneurs.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!