【发布时间】:2014-06-14 18:00:49
【问题描述】:
我将 Xcode 与 C++ 11 一起用于 std::map。我地图中的某些元素有一个标志,表明它们需要被删除。
我想遍历地图,在 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<>管理对象生命周期,然后使用erase/remove_if和一个检查您的删除标志的lambda。有关示例,请参见 en.cppreference.com/w/cpp/algorithm/remove。