【问题标题】:C++ Erase element from set during for_eachC++ 在 for_each 期间从集合中擦除元素
【发布时间】:2015-03-31 06:14:32
【问题描述】:

在对集合执行 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);
}

还有在范围内for循环怎么样?

我假设答案适用于地图和集合。

【问题讨论】:

    标签: c++ dictionary foreach set erase


    【解决方案1】:

    问题:

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

    是的,这是合法的。

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

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-11-06
      • 1970-01-01
      • 2020-02-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-09-05
      相关资源
      最近更新 更多