C++在for_each期间从擦除元素中删除元素
问题描述:
只要您不删除当前项目,在为集合执行for_each时从集合中删除元素是否合法?C++在for_each期间从擦除元素中删除元素
设置擦除保持除正被擦除的所有迭代器都有效。
例如:
set<int> nums{0, 1, 2, 3, 4};
void weird_remove(int x) {
int randnum = rand() % 5;
if (randnum != x) {
nums.erase(randnum);
}
}
int main() {
for_each(nums.begin(), nums.end(), weird_remove);
}
而且怎么样范围在循环中?
我假设答案适用于地图以及设置。
答
问:
是否合法擦除从
set
一个元素,而这样做for_each
在set
,只要你不删除当前的项目吗?
是的,这是合法的。
从http://en.cppreference.com/w/cpp/container/set/erase:
size_type erase(const key_type& key); (3)
中删除指定的从所述容器的元件。
3)使用键值键删除所有元素。
对擦除元素的引用和迭代器将失效。其他引用和迭代器不受影响。