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érons le scénario dans lequel un std::vector<:string> 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, ce qui complique davantage le parcours.
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 :
std::vector<:string>::iterator iter;
for (iter = m_vPaths.begin(); iter != m_vPaths.end(); ) {
if (::DeleteFile(iter->c_str()))
iter = m_vPaths.erase(iter);
else
iter;
}
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.
Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.
Copyright© 2022 湘ICP备2022001581号-3