使用迭代器从c ++中的map中删除项目

时间:2015-04-01 11:27:32

标签: c++11 dictionary iterator

map<int, int> m_map;
// ...
map::iterator it =  m_map.begin();
while (it != m_map.end())
{
  m_map.erase(it++);
}

++行动何时发生?是erase之前还是之后?什么时候这样做是安全的?

1 个答案:

答案 0 :(得分:3)

我认为++在调用erase之前或之后是否发生了while (it != m_map.end()) { it = m_map.erase(it); } 。尽管如此,即使在通话之前保证可以进行操作,你必须要求的事实表明代码是坏的。有一个更好的,100%安全的替代方案:

{{1}}

erase将一个迭代器返回到已擦除的元素之后。