我的STL有点生疏了,所以请原谅我问了一个可能微不足道的问题。考虑下面这段代码:
map<int,int> m;
...
for (auto itr = m.begin(); itr != m.end(); ++itr) {
if (itr->second == 0) {
m.erase(itr);
}
}
问题是:在map上循环时擦除元素是否安全?
发布于 2011-03-04 17:02:37
是的,但不是你做的方式。当您删除时,您将使itr无效,然后递增无效的迭代器。
auto itr = m.begin();
while (itr != m.end()) {
if (itr->first == 0) {
m.erase(itr++);
} else {
++itr;
}
}
https://stackoverflow.com/questions/5191644
复制相似问题