Maison >développement back-end >C++ >Comment supprimer en toute sécurité des éléments d'une « std :: list » lors d'une itération ?
En C , la classe std::list intégrée est une liste à double lien, permettant une insertion et une suppression efficaces d'éléments. Cependant, lorsque vous tentez de modifier une liste pendant une itération, il est crucial d'aborder l'opération avec prudence.
Problème : Une erreur s'est produite lors de la vérification itérative de l'état d'activité des éléments dans std : liste et essayer de supprimer immédiatement les éléments inactifs. L'erreur « Itérateur de liste non incrémentable » a été rencontrée lors de la tentative de déplacement de l'itérateur après la suppression d'un élément.
Solution : La clé pour réussir à supprimer des éléments pendant l'itération consiste à appliquer les modifications à l'itérateur. d'abord, avant d'effectuer la suppression. Au lieu d'essayer d'incrémenter l'itérateur puis de supprimer l'élément, il est plus approprié de restructurer la boucle en tant que boucle while, permettant à l'itérateur d'être incrémenté dans la boucle elle-même. Ainsi, le code mis à jour ci-dessous démontre l'approche correcte :
std::list<item*>::iterator i = items.begin(); while (i != items.end()) { bool isActive = (*i)->update(); if (!isActive) { i = items.erase(i); // alternatively, i = items.erase(i++); } else { other_code_involving(*i); ++i; } }
Ce code révisé garantit que l'itérateur est correctement incrémenté avant d'exécuter la suppression de l'élément, évitant ainsi l'erreur et permettant une suppression efficace des éléments inactifs lors de l'itération. la liste.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!