如何在迭代时从地图中删除?

丹妮

如何在迭代时从地图中删除?喜欢:

std::map<K, V> map;
for(auto i : map)
    if(needs_removing(i))
        // remove it from the map

如果我使用map.erase它将使迭代器无效

克瑞克SB

标准的关联容器擦除习惯用法:

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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章