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

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

Barbara Streisand
Libérer: 2024-12-06 14:45:13
original
935 Les gens l'ont consulté

How to Safely Remove Elements from a Vector During Loop Iteration in C  ?

Supprimer des éléments d'un vecteur dans une boucle

Il est essentiel de savoir comment supprimer efficacement des éléments d'un vecteur lors des itérations de boucle. Tenter de le faire en utilisant le code suivant peut entraîner une erreur :

for (vector<Player>::iterator it = allPlayers.begin(); it != allPlayers.end(); it++)
{
    if(it->getpMoney() <= 0)
        it = allPlayers.erase(it);
    else
        ++it;
}
Copier après la connexion

Le message d'erreur "La fonction opérateur '=' n'est pas disponible dans 'Player'", indique que les objets du vecteur ne peuvent pas être directement réaffecté. Pour résoudre ce problème, la classe Player doit implémenter l'opérateur d'affectation (=).

De plus, la boucle for doit être modifiée pour éviter d'incrémenter explicitement l'itérateur, car cela est déjà géré en interne :

for (vector<Player>::iterator it = allPlayers.begin(); it != allPlayers.end(); )
{
    if(it->getpMoney() <= 0)
        it = allPlayers.erase(it);
    else
        ++it;
}
Copier après la connexion

Au lieu d'utiliser une boucle brute, il est recommandé d'exploiter l'idiome Erase-Remove pour une plus grande efficacité :

allPlayers.erase(
    std::remove_if(
        allPlayers.begin(),
        allPlayers.end(),
        [](Player const &amp; p) { return p.getpMoney() <= 0; }
    ),
    allPlayers.end()
);
Copier après la connexion

Ceci idiom utilise l'algorithme Remove_if pour filtrer les éléments qui remplissent la condition spécifiée (les joueurs avec de l'argent nul ou négatif dans ce cas), puis utilise la fonction d'effacement pour les supprimer du vecteur.

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