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 ?

Pouvez-vous supprimer des éléments d'un vecteur lors d'une boucle For basée sur une plage C 11 ?

Susan Sarandon
Susan Sarandonoriginal
2024-12-02 13:07:12151parcourir

Can You Remove Elements from a Vector During a C  11 Range-based For Loop?

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn