Suppression efficace des éléments d'un std::vector pendant l'itération
Question :
Comment supprimer efficacement des éléments d'un std::vector tout en itérant dessus sans invalider les itérateurs existants ? Considérez le scénario suivant :
<code class="cpp">std::vector<std::string> m_vPaths; for (auto iter = m_vPaths.begin(); iter != m_vPaths.end(); iter++) { if (::DeleteFile(iter->c_str())) { m_vPaths.erase(iter); // Invalidates remaining iterators } }</code>
Réponse :
La méthode Eraser() fournie par std::vector invalide les itérateurs. Pour éviter ce problème, on peut utiliser la valeur de retour de Eraser() qui pointe vers le prochain itérateur valide :
<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); // Sets iter to next valid element else ++iter; }</code>
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!