迭代時有效地從std::vector 中刪除元素
在C 程式設計領域,開發人員經常遇到操作std:: vector 的挑戰::向量,同時遍歷其元素。雖然迭代器為此任務提供了一種方便的機制,但在迭代過程中嘗試刪除元素時會出現一個常見的陷阱。
考慮 std::vector<:string> 的場景。用於儲存檔案路徑列表。目標是刪除每個檔案並從向量中刪除其路徑。然而,使用傳統方法,例如擦除()方法,每次刪除後都會使迭代器失效,從而使進一步的遍歷變得複雜。
為了克服這個限制,開發人員設計了更有效的方法。呼叫時,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); else ++iter; }</code>
在此程式碼片段中,循環按預期繼續,每次刪除後 iter 都會自動更新為指向下一個有效元素。這種有效的方法消除了對額外向量的需要,並簡化了迭代時刪除元素的過程。
以上是如何在迭代時安全地從 std::vector 中刪除元素?的詳細內容。更多資訊請關注PHP中文網其他相關文章!