C++迭代器失效规则:迭代器何时变得无效?
大家好!我开始学习C++,正在编写一个处理订单列表的小程序。我使用了`std::vector`。以下是简化代码:
```cpp
#include
#include
int main() {
std::vector orders = {101, 102, 103, 104, 105};
// 查找订单103并删除它
for (auto it = orders.begin(); it != orders.end(); ++it) {
if (*it == 103) {
orders.erase(it); // <-- 这里我删除了元素
}
}
// 输出剩余订单
for (int order : orders) {
std::cout << order << " ";
}
return 0;
}
```
在Visual Studio 2022中,这段代码有时会崩溃,有时会输出奇怪的数字。我读到这与“迭代器失效”有关,但不太理解这是什么意思。
我的问题:
1. 为什么我的代码会出错?
2. 哪些容器操作会使迭代器失效?
3. 如何在迭代过程中正确删除元素?
感谢详细解答!