map<int, int> m_map;
// ...
map::iterator it = m_map.begin();
while (it != m_map.end())
{
m_map.erase(it++);
}
++
行动何时发生?是erase
之前还是之后?什么时候这样做是安全的?
答案 0 :(得分:3)
我认为++
在调用erase
之前或之后是否发生了while (it != m_map.end())
{
it = m_map.erase(it);
}
。尽管如此,即使在通话之前保证可以进行操作,你必须要求的事实表明代码是坏的。有一个更好的,100%安全的替代方案:
{{1}}
erase
将一个迭代器返回到已擦除的元素之后。