在遍歷set時,應該避免在循環體內對set進行修改操作,因為這樣可能會導致迭代器失效,從而導致死循環的發生。
如果需要在遍歷set的過程中對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);
}
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時出現死循環的情況。