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_eachset,只要你不删除当前的项目吗?

是的,这是合法的。

http://en.cppreference.com/w/cpp/container/set/erase

size_type erase(const key_type& key); (3)

中删除指定的从所述容器的元件。
3)使用键值键删除所有元素。

对擦除元素的引用和迭代器将失效。其他引用和迭代器不受影响。