我正在使用Xcode和C++ 11作爲std :: map。我的地圖中的一些元素有一個標誌,說他們需要刪除。是否std :: map :: erase(it ++)維護一個有效的迭代器指向地圖中的下一個元素?
我想循環遍歷地圖,在O(n)時間擦除標記的元素。擦除調用不會返回迭代器。我已經看到了某種擦除(it ++)實現,但是我沒有證據表明這種調用可以工作,因爲在擦除操作之後但在增量操作之前迭代器將變爲無效。
我目前的代碼似乎效率很低。
for(auto it = myMap.begin(); it != myMap.end(); ++it)
{
delete *it;
myMap.erase(it);
it = myMap.begin(); //how can I avoid iterating through the map again
}
使用'的unique_ptr <>'來管理對象的生命週期,然後使用'擦除/ remove_if'與檢查你移開標記的λ。以http://en.cppreference.com/w/cpp/algorithm/remove爲例。 – mythagel