Maison > développement back-end > C++ > Comment puis-je supprimer en toute sécurité des éléments d'un vecteur C dans une boucle ?

Comment puis-je supprimer en toute sécurité des éléments d'un vecteur C dans une boucle ?

Barbara Streisand
Libérer: 2024-12-10 07:58:09
original
1009 Les gens l'ont consulté

How Can I Safely Remove Elements from a C   Vector Within a Loop?

Effacer des éléments vectoriels dans une boucle

En C, la manipulation des vecteurs pendant l'itération peut être délicate en raison du risque d'invalidation des itérateurs. Cet article aborde le problème de la suppression en toute sécurité d'éléments d'un vecteur en fonction d'une condition dans une boucle.

Code initial et message d'erreur

Le code présenté dans la question d'origine tente de supprimer des éléments d'un vecteur tout en le parcourant. Cependant, il rencontre le message d'erreur "'operator =' function is inavailable in 'Player'."

Raison de l'erreur

L'erreur se produit car l'effacement ( ) utilise en interne l'opérateur d'affectation (=) pour déplacer les éléments dans le vecteur. L'absence d'opérateur d'affectation pour la classe Player empêche l'exécution réussie de Eraser().

Solution

Pour résoudre le problème, le code doit d'abord implémenter l'affectation opérateur pour la classe Player. De plus, il doit éviter d'incrémenter l'itérateur (it ) dans la boucle, car il est automatiquement mis à jour à chaque itération.

Approche alternative : effacer-supprimer l'idiome

L'itérateur Erase-Remove Idiom fournit une solution plus élégante et plus efficace à ce problème. Il utilise la fonction std::remove_if() pour identifier et éliminer les éléments qui répondent à une condition spécifiée. Le code ci-dessous illustre cette approche :

allPlayers.erase(
    std::remove_if(
        allPlayers.begin(),
        allPlayers.end(),
        [](Player const &amp; p) { return p.getpMoney() <= 0; } // Lambda function to identify players with negative money
    ),
    allPlayers.end()
);
Copier après la connexion

Conclusion

En abordant le risque d'itérateurs non valides, en implémentant l'opérateur d'affectation si nécessaire et en utilisant des algorithmes efficaces, les développeurs peut supprimer en toute sécurité des éléments des vecteurs dans les boucles en C .

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