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

Comment puis-je supprimer en toute sécurité des éléments d'une carte lors d'une itération en C ?

Mary-Kate Olsen
Libérer: 2024-12-24 17:00:12
original
624 Les gens l'ont consulté

How Can I Safely Remove Elements from a Map While Iterating in C  ?

Itération de carte sécurisée avec suppression d'éléments

Lorsque vous travaillez avec des cartes, vous pouvez rencontrer le besoin de supprimer des éléments lors d'une itération sur elles. Cependant, l'utilisation de la méthode Eraser() de la carte directement dans une boucle peut invalider les itérateurs. Pour éviter ce problème, utilisez l'idiome suivant :

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

Cet idiome utilise une boucle for non basée sur une plage pour modifier directement le conteneur. En incrémentant l'itérateur à l'intérieur de la boucle uniquement lorsque l'élément ne doit pas être supprimé, nous maintenons l'intégrité de l'itération.

Notez qu'avant C 11, l'effacement des itérateurs const nécessitait une syntaxe légèrement différente :

for (std::map<K,V>::iterator it = m.begin(); it != m.end(); ) { /* ... */ }
Copier après la connexion

N'oubliez pas que la suppression d'éléments ne viole pas la constance, car les éléments const peuvent toujours cesser d'exister.

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