Avatar ·

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. 如何在迭代过程中正确删除元素? 感谢详细解答!