Avatar ·

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.