在迭代期间从映射中删除元素
在 C 中,在删除元素时迭代标准库映射可能具有挑战性,因为使用擦除() 使迭代器无效。然而,有一个被广泛接受的习惯用法来解决这个问题:
for(auto it = m.begin(); it != m.cend() /* not hoisted */; /* no increment */) { if(must_delete) { auto next = it; it = m.erase(it); // or "it = m.erase(it)" since C++11 } else { ++it; } }
这个习惯用法是这样的:
Pre-C 11 语法:
在 C 11 之前,擦除常量迭代器需要稍微不同的语法:
for (std::map<K,V>::iterator it = m.begin(); it != m.end(); ) { /* ... */ }
常量和删除:
从映射中删除元素不会违反元素的常量性,类似于删除指向常量的指针。常量主要限制修改值的能力,而不是其生命周期。
以上是如何在迭代过程中安全地从 C 映射中删除元素?的详细内容。更多信息请关注PHP中文网其他相关文章!