如何在迭代时从地图中删除?喜欢:
std::map<K, V> map;
for(auto i : map)
if(needs_removing(i))
// remove it from the map
如果我使用map.erase
它将使迭代器无效
标准的关联容器擦除习惯用法:
for (auto it = m.cbegin(); it != m.cend() /* not hoisted */; /* no increment */)
{
if (must_delete)
{
m.erase(it++); // or "it = m.erase(it)" since C++11
}
else
{
++it;
}
}
请注意for
,由于要修改容器本身,因此我们确实希望在此处进行普通循环。基于范围的循环应严格保留给我们只关心元素的情况。RBFL的语法甚至没有将容器暴露在循环体内,从而使这一点很清楚。
编辑。在C ++ 11之前的版本中,您无法删除构造函数。在那里你不得不说:
for (std::map<K,V>::iterator it = m.begin(); it != m.end(); ) { /* ... */ }
从容器中删除元素与元素的恒定性并不矛盾。以此类推,它始终是指向常量的指针的绝对合法的delete p
地方p
。坚固性不会限制寿命。C ++中的const值仍然可以停止存在。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句