Supprimer des éléments d'une carte pendant une itération
En C, parcourir une carte de bibliothèque standard tout en supprimant des éléments peut être difficile, comme l'utilisation de l'effacement () invalide les itérateurs. Cependant, il existe une expression largement acceptée pour résoudre ce problème :
for(auto it = m.begin(); it != m.cend() /* not hoisted */; /* no increment */) { if(must_delete) { auto next = it; it = m.erase(it); // or "it = m.erase(it)" since C++11 } else { ++it; } }
Voici comment cette expression fonctionne :
Syntaxe pré-C 11 :
Avant C 11, l'effacement des itérateurs const nécessitait un léger syntaxe différente :
for (std::map<K,V>::iterator it = m.begin(); it != m.end(); ) { /* ... */ }
Constesse et Suppression :
L'effacement d'un élément d'une carte ne viole pas la constance des éléments, comme la suppression d'un pointeur vers une constante. La constance limite principalement la capacité de modifier la valeur, et non sa durée de vie.
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!