C++ C++;在为每个\u设置期间从集合中删除元素

C++ C++;在为每个\u设置期间从集合中删除元素,c++,dictionary,foreach,set,erase,C++,Dictionary,Foreach,Set,Erase,只要不删除当前项,在集合上为每个元素执行操作时从集合中删除元素是否合法 Set erase使所有迭代器保持有效,但被擦除的迭代器除外 例如: 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_ea

只要不删除当前项,在集合上为每个元素执行操作时从集合中删除元素是否合法

Set erase使所有迭代器保持有效,但被擦除的迭代器除外

例如:

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 nums{0,1,2,3,4};
无效删除(int x){
int randnum=rand()%5;
if(randnum!=x){
nums.erase(randnum);
}
}
int main(){
对于每个(nums.begin()、nums.end()、word_remove);
}
在循环的范围内又如何呢

我假设答案既适用于地图,也适用于集合。

问题:

集合
上对每个执行
操作时,从
集合
中删除元素是否合法,只要不删除当前项即可

是的,这是合法的

发件人:

大小类型擦除(常量键类型和键);(3) 

从容器中删除指定的元素。
3) 删除具有键值键的所有元素

对已删除元素的引用和迭代器无效。其他引用和迭代器不受影响