只要您不删除当前项目,在对集合执行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);
}
在循环范围内怎么样?
我认为答案既适用于地图也适用于设定。
答案 0 :(得分:2)
问题:
只要您不删除当前项目,在
set
上对for_each
执行set
时删除元素是否合法?
是的,这是合法的。
来自http://en.cppreference.com/w/cpp/container/set/erase:
size_type erase( const key_type& key ); (3)
从容器中删除指定的元素 3)使用键值键删除所有元素。
擦除元素的引用和迭代器无效。其他引用和迭代器不受影响。