Unordered_map 擦除方法存储临时变量
Posted
技术标签:
【中文标题】Unordered_map 擦除方法存储临时变量【英文标题】:Unordered map erase method storing temporary variable 【发布时间】:2021-01-12 15:25:16 【问题描述】:对于unordered_map
erase()
,我看到一些线程建议使用不同的方法(例如从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
无效?
这个方法没有问题,确实有人建议,例如***.com/questions/263945/…
同样正确的是 map.erase(it1++);
不需要第二个变量。您必须了解迭代器在调用擦除之前递增,这是人们确实感到困惑的事情。
【参考方案1】:
这种方法效果很好。 std::unordered_map::erase
仅使擦除元素的迭代器(即it2
)无效,前面的递增迭代器it1
仍然有效。
对已擦除元素的引用和迭代器无效。其他迭代器和引用不会失效。
【讨论】:
以上是关于Unordered_map 擦除方法存储临时变量的主要内容,如果未能解决你的问题,请参考以下文章
【UBoot移植】当bootdelay误设置为0时 怎么擦除nandflash里面的程序 重新烧写u-boot没用