Avatar ·

Reglas de invalidación de iteradores en C++: ¿cuándo los iteradores se vuelven inválidos?

¡Hola a todos! Empecé a estudiar C++ y estoy escribiendo un pequeño programa para procesar una lista de pedidos. Uso `std::vector`. Aquí está el código simplificado: ```cpp #include #include int main() { std::vector orders = {101, 102, 103, 104, 105}; // Buscamos el pedido 103 y lo eliminamos for (auto it = orders.begin(); it != orders.end(); ++it) { if (*it == 103) { orders.erase(it); // <-- aquí elimino el elemento } } // Mostramos los pedidos restantes for (int order : orders) { std::cout << order << " "; } return 0; } ``` En Visual Studio 2022 este código a veces falla con un error, y a veces muestra números extraños. He leído que esto está relacionado con la "invalidación de iteradores", pero no entiendo completamente qué significa. Mis preguntas: 1. ¿Por qué mi código se rompe? 2. ¿Qué operaciones con contenedores hacen que los iteradores sean inválidos? 3. ¿Cómo eliminar correctamente elementos durante la iteración? Agradecería una respuesta detallada.