当你在C++中使用set时,迭代器失效通常发生在以下几种情况:
为了避免迭代器失效,你可以采取以下措施:
#include <iostream>
#include <set>
int main() {
std::set<int> my_set = {1, 2, 3, 4, 5};
for (const auto& element : my_set) {
std::cout << element << std::endl;
}
return 0;
}
std::remove
算法将不需要的元素移到set的末尾,然后使用erase
方法删除它们。#include <iostream>
#include <set>
int main() {
std::set<int> my_set = {1, 2, 3, 4, 5};
// 使用迭代器遍历并删除元素
for (auto it = my_set.begin(); it != my_set.end(); ) {
if (*it == 3) {
it = my_set.erase(it);
} else {
++it;
}
}
// 使用std::remove算法将不需要的元素移到set的末尾,然后使用erase方法删除它们
my_set.erase(std::remove(my_set.begin(), my_set.end(), 3), my_set.end());
return 0;
}
注意:在修改set时,确保不会破坏迭代器的逻辑,例如不要使用已经失效的迭代器。