温馨提示×

c++遍历set时如何避免死循环

c++
小樊
93
2024-06-24 16:21:29
栏目: 编程语言

在遍历set时,应该避免在循环体内对set进行修改操作,因为这样可能会导致迭代器失效,从而导致死循环的发生。

如果需要在遍历set的过程中对set进行修改操作,可以采用以下两种方法来避免死循环:

  1. 使用临时变量保存需要删除或插入的元素,然后在遍历完成后再对set进行修改操作。
std::set<int> mySet = {1, 2, 3, 4, 5};
std::set<int> elementsToRemove;

for (auto it = mySet.begin(); it != mySet.end(); ++it) {
    if (*it % 2 == 0) {
        elementsToRemove.insert(*it);
    }
}

for (auto num : elementsToRemove) {
    mySet.erase(num);
}
  1. 使用迭代器进行遍历,并在处理完当前元素后手动更新迭代器。
std::set<int> mySet = {1, 2, 3, 4, 5};

for (auto it = mySet.begin(); it != mySet.end();) {
    if (*it % 2 == 0) {
        it = mySet.erase(it);
    } else {
        ++it;
    }
}

通过以上方法,可以避免在遍历set时出现死循环的情况。

0