Maison >développement back-end >C++ >Comment effacer en toute sécurité des éléments d'un vecteur C lors d'une itération ?

Comment effacer en toute sécurité des éléments d'un vecteur C lors d'une itération ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-12-05 04:31:09444parcourir

How to Safely Erase Elements from a C   Vector While Iterating?

Éradication des vecteurs avec effacement des itérateurs

En programmation, parcourir et manipuler efficacement les structures de données est crucial. Les vecteurs, un conteneur dynamique populaire en C, offrent flexibilité et capacités de croissance. Cependant, effacer des éléments lors de leur itération peut conduire à des résultats inattendus.

Considérez cet exemple :

int main()
{
    vector<int> res;
    res.push_back(1);
    vector<int>::iterator it = res.begin();
    for( ; it != res.end(); it++)
    {
        it = res.erase(it);
        //if(it == res.end())
        //  return 0;
    }
}

Le code ci-dessus vise à effacer tous les éléments du vecteur « res » lors de l'itération. . Cependant, il rencontre une erreur lors de l'effacement du dernier élément. En effet, l'itérateur renvoyé par 'res.erase(it)' pointe vers le prochain élément valide, qui serait 'res.end()' dans ce cas.

Pour résoudre ce problème, on peut utiliser une boucle while sans l'instruction conditionnelle, comme :

while (it != res.end()) {
    it = res.erase(it);
}

Cela garantit que la boucle continue jusqu'à ce que tous les éléments aient été effacés.

Alternativement, if il vous suffit d'effacer des éléments spécifiques en fonction d'une certaine condition, vous pouvez utiliser l'approche suivante :

for ( ; it != res.end(); ) {
  if (condition) {
    it = res.erase(it);
  } else {
    ++it;
  }
}

N'oubliez pas que lorsque vous utilisez des itérateurs pour la manipulation de vecteurs, il est essentiel de comprendre comment 'res.erase(it)' fonctionne et d'ajuster la boucle en conséquence pour éviter les comportements inattendus.

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!

Déclaration:
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