Maison > développement back-end > C++ > Comment supprimer en toute sécurité des éléments d'une carte C pendant l'itération ?

Comment supprimer en toute sécurité des éléments d'une carte C pendant l'itération ?

Mary-Kate Olsen
Libérer: 2024-12-11 00:38:09
original
403 Les gens l'ont consulté

How to Safely Remove Items from a C   Map During Iteration?

Supprimer des éléments d'une carte lors d'une itération en C

Lorsque vous parcourez une carte et tentez de supprimer des éléments en fonction de conditions spécifiques, il est Il est important de considérer l’impact de l’effacement d’éléments sur l’itérateur. Effacer un élément lors d'une itération sur la carte invalidera l'itérateur, ce qui rendra difficile la poursuite du processus d'itération.

Idiome d'effacement standard pour les conteneurs associatifs

L'idiome standard pour effacer d'un conteneur associatif (comme une carte) pendant l'itération est comme suit :

for (auto it = m.cbegin(); it != m.cend() /* not hoisted */; /* no increment */)
{
  if (must_delete)
  {
    m.erase(it++);    // or "it = m.erase(it)" since C++11
  }
  else
  {
    ++it;
  }
}
Copier après la connexion

Explication

  • Démontage de la condition de boucle : Cela garantit que la boucle vérifie la fin de la carte à chaque fois.
  • Ne pas incrémenter l'itérateur dans le cas de suppression :Quand un élément est supprimé, l'itérateur pointe vers l'élément suivant de la carte. Cela signifie que la boucle ne doit pas incrémenter l'itérateur après l'effacement.
  • Itérateurs const : Dans la version antérieure à C 11, les itérateurs const ne pouvaient pas être effacés. Dans ce cas, un itérateur traditionnel (par exemple, std::map::iterator) doit être utilisé.

En suivant cet idiome, vous pouvez supprimer en toute sécurité des éléments de la carte tout en itérer sans invalider les itérateurs.

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!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal