Effizientes Entfernen von Elementen aus einem std::vector während der Iteration
Frage:
Wie kann man effizient Elemente aus einem std::vector entfernen, während man darüber iteriert, ohne vorhandene Iteratoren ungültig zu machen? Stellen Sie sich das folgende Szenario vor:
<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>
Antwort:
Die von std::vector bereitgestellte erase()-Methode macht Iteratoren ungültig. Um dieses Problem zu vermeiden, kann man den Rückgabewert von erase() verwenden, der auf den nächsten gültigen Iterator zeigt:
<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>
Das obige ist der detaillierte Inhalt vonWie entferne ich während der Iteration Elemente aus einem „std::vector', ohne Iteratoren ungültig zu machen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!