迭代std::vector 並執行需要修改向量大小的操作(例如刪除)時元素,您可能會遇到迭代器無效的問題。這是因為用於刪除元素的擦除()方法會更改向量的大小並使所有現有迭代器無效。
要克服這個問題,一個有效的解決方案是使用返回值的erase()方法,它提供了一個新的、有效的迭代器,指向緊接著被刪除元素之後的元素。這使您可以繼續迭代,而不必擔心無效的迭代器。
以下程式碼示範了這個方法:
<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); // Returns a new valid iterator } else { ++iter; // Advance iterator if file deletion failed } }</code>
在此程式碼中,iter 迭代器更新為指向每次成功刪除檔案後的下一個元素,使迭代能夠順利進行。
雖然使用迭代器方法效率很高,但它仍然修改了原始的m_vPaths 向量,這可能會提高效能如果您需要進行多次刪除,則會產生影響。在這種情況下,最好考慮使用有效刪除元素而最佳化的替代資料結構,例如:
以上是如何在迭代過程中有效地從 std::vector 中刪除元素?的詳細內容。更多資訊請關注PHP中文網其他相關文章!