Règles d'invalidation des itérateurs en C++ : quand les itérateurs deviennent-ils invalides ?
Bonjour à tous ! J'ai commencé à apprendre le C++ et j'écris un petit programme pour traiter une liste de commandes. J'utilise `std::vector`. Voici un code simplifié :
```cpp
#include
#include
int main() {
std::vector orders = {101, 102, 103, 104, 105};
// Nous cherchons la commande 103 et la supprimons
for (auto it = orders.begin(); it != orders.end(); ++it) {
if (*it == 103) {
orders.erase(it); // <-- ici je supprime l'élément
}
}
// Nous affichons les commandes restantes
for (int order : orders) {
std::cout << order << " ";
}
return 0;
}
```
Dans Visual Studio 2022, ce code plante parfois avec une erreur, et parfois affiche des nombres étranges. J'ai lu que cela est lié à l'"invalidation des itérateurs", mais je ne comprends pas complètement ce que cela signifie.
Mes questions :
1. Pourquoi mon code se casse-t-il ?
2. Quelles opérations sur les conteneurs rendent les itérateurs invalides ?
3. Comment supprimer correctement des éléments pendant l'itération ?
Je vous remercie d'avance pour une réponse détaillée.