Maison > développement back-end > C++ > Comment supprimer des éléments d'un vecteur lors d'une itération sans invalider les itérateurs ?

Comment supprimer des éléments d'un vecteur lors d'une itération sans invalider les itérateurs ?

Barbara Streisand
Libérer: 2024-10-31 01:23:29
original
344 Les gens l'ont consulté

How to Remove Elements from a Vector while Iterating Without Invalidating Iterators?

Suppression d'éléments d'un vecteur lors d'une itération

Lors d'une itération sur un std::vector et de la suppression d'éléments en fonction de critères spécifiques, l'utilisation de plusieurs vecteurs ou itérateurs invalidés peuvent survenir. Ce problème peut être résolu en exploitant une structure de données plus adaptée ou en employant une approche alternative.

Structures de données alternatives

Au lieu d'utiliser plusieurs vecteurs, envisagez d'utiliser des structures de données alternatives telles que as:

  • std::set: Conserve une collection d'éléments uniques qui sont automatiquement triés. Cette propriété peut être avantageuse pour accéder aux éléments dans un ordre précis tout en évitant les doublons.
  • std::list: Une liste doublement chaînée permet des opérations d'insertion et de suppression efficaces. Les itérateurs restent valides après la suppression de l'élément, ce qui les rend adaptés aux scénarios dans lesquels la séquence d'éléments change fréquemment.

Approche modifiée

Si l'utilisation d'une structure de données différente est pas faisable, il existe des solutions de contournement dans le std::vector:

  1. Utilisez une approche basée sur un itérateur : Parcourez le vecteur à l'aide d'une boucle et appelez Eraser() sur l'itérateur pointant vers l’élément à supprimer. Cette approche peut être efficace si le nombre d'éléments à supprimer est relativement faible.
  2. Utilisez une approche vectorielle : Parcourez le vecteur deux fois. Lors de la première itération, identifiez les éléments à supprimer et stockez leurs indices dans un vecteur séparé. Dans la deuxième itération, utilisez les indices pour effacer les éléments. Cette approche peut être efficace si un grand nombre d'éléments doivent être supprimés.

En implémentant ces méthodes alternatives, il est possible de supprimer des éléments d'un std::vector tout en itérant efficacement et 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