Maison  >  Article  >  développement back-end  >  Comment supprimer en toute sécurité des éléments d'un std :: vector lors d'une itération ?

Comment supprimer en toute sécurité des éléments d'un std :: vector lors d'une itération ?

Patricia Arquette
Patricia Arquetteoriginal
2024-11-02 02:52:30361parcourir

How to Safely Remove Elements from a std::vector While Iterating?

Supprimer efficacement des éléments de std :: vector lors de l'itération

Dans le domaine de la programmation C, les développeurs sont souvent confrontés au défi de manipuler un std ::vecteur en parcourant ses éléments. Bien que les itérateurs fournissent un mécanisme pratique pour cette tâche, un piège courant survient lorsque l'on tente de supprimer des éléments au cours d'une itération.

Considérez le scénario dans lequel un std::vector est utilisé pour stocker une liste de chemins d’accès aux fichiers. Le but est de supprimer chaque fichier et de supprimer son chemin du vecteur. Cependant, l'utilisation de méthodes traditionnelles, telles que la méthode Eraser(), invalide les itérateurs après chaque suppression, compliquant ainsi le parcours ultérieur.

Pour surmonter cette limitation, les développeurs ont conçu une approche plus efficace. La méthode delete(), lorsqu'elle est invoquée, supprime non seulement l'élément désigné mais renvoie également un nouvel itérateur pointant vers l'élément suivant. Ce comportement unique permet une poursuite fluide de la boucle :

<code class="cpp">std::vector<std::string>::iterator iter;
for (iter = m_vPaths.begin(); iter != m_vPaths.end(); ) {
    if (::DeleteFile(iter->c_str()))
        iter = m_vPaths.erase(iter);
    else
        ++iter;
}</code>

Dans cet extrait de code, la boucle continue comme prévu, iter étant automatiquement mis à jour pour pointer vers le prochain élément valide après chaque suppression. Cette méthode efficace élimine le besoin d'un vecteur supplémentaire et rationalise le processus de suppression d'éléments lors de l'itération.

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