迭代時有效地從std::vector 中刪除元素
在C 程式設計領域,開發人員經常遇到操作std 的挑戰::向量,同時遍歷其元素。雖然迭代器為此任務提供了一種方便的機制,但在迭代期間嘗試刪除元素時會出現一個常見的陷阱。
考慮使用 std::vector<:string> 儲存清單的場景檔案的路徑。目標是刪除每個檔案並從向量中刪除其路徑。然而,使用傳統方法,例如擦除()方法,每次刪除後都會使迭代器失效,從而使進一步的遍歷變得複雜。
為了克服這個限制,開發人員設計了更有效的方法。呼叫時,erase() 方法不僅會刪除指定元素,還會傳回指向下一個元素的新迭代器。這種獨特的行為允許循環順利繼續:
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;
}
在此程式碼片段中,循環如預期般繼續,每次刪除後 iter 都會自動更新為指向下一個有效元素。這種有效的方法消除了對額外向量的需要,並簡化了迭代時刪除元素的過程。
免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。
Copyright© 2022 湘ICP备2022001581号-3