在for_each期间设置的C ++ Erase元素

时间:2015-03-31 06:14:32

标签: c++ dictionary foreach set erase

只要您不删除当前项目,在对集合执行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);
}

在循环范围内怎么样?

我认为答案既适用于地图也适用于设定。

1 个答案:

答案 0 :(得分:2)

问题:

  

只要您不删除当前项目,在set上对for_each执行set时删除元素是否合法?

是的,这是合法的。

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

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

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

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