【发布时间】:2021-01-12 15:25:16
【问题描述】:
对于unordered_maperase(),我看到一些线程建议使用不同的方法(例如从erase() 的返回中获取下一个元素)。但是,我还没有看到有人提出以下建议。所以,我想知道这种方法是否存在问题:
for (auto it1 = map.begin(); it1 != map.end(); )
{
auto it2 = it1++; //it2 assigned before it1 incremented
map.erase(it2);
}
【问题讨论】:
-
你为什么不能只做
map.erase(it1);? -
@feverdream 这会使
it1无效,并且循环的后续迭代将是未定义的。规范的方式是it1 = map.erase(it1)。 -
@feverdream 因为那会使
it1无效? -
这个方法没有问题,确实有人建议,例如stackoverflow.com/questions/263945/…
-
同样正确的是
map.erase(it1++);不需要第二个变量。您必须了解迭代器在调用擦除之前递增,这是人们确实感到困惑的事情。
标签: c++ unordered-map