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.
No answers yet.
Inicia sesión para dejar una respuesta