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

Comment supprimer en toute sécurité des éléments d'un std :: list C lors d'une itération ?

Linda Hamilton
Libérer: 2024-12-24 14:07:16
original
169 Les gens l'ont consulté

How to Safely Remove Elements from a C   std::list While Iterating?

Suppression itérative d'éléments en C std::List

En C, std::list est un conteneur qui fournit des données de liste doublement chaînées structure. Lors de la navigation dans une liste, il peut être nécessaire de supprimer des éléments en fonction de conditions spécifiques. Ce problème survient lorsque la suppression d'éléments directement dans la boucle d'itération entraîne une erreur « Itérateur de liste non incrémentable ».

Pour résoudre ce problème, il est essentiel d'incrémenter l'itérateur (i ) avant de supprimer l'élément précédent. Ceci peut être réalisé en utilisant une boucle while comme suit :

std::list<item*>::iterator i = items.begin();
while (i != items.end())
{
    bool isActive = (*i)->update();
    if (!isActive)
    {
        items.erase(i++); // alternatively, i = items.erase(i);
    }
    else
    {
        other_code_involving(*i);
        ++i;
    }
}
Copier après la connexion

Dans ce code révisé, l'itérateur i est incrémenté à l'intérieur de la boucle, permettant à l'opération items.erase(i ) de supprimer avec succès l'élément précédent. . Alternativement, i peut être remplacé par i = items.erase(i) pour le même effet.

En mettant en œuvre cette approche, les éléments peuvent être supprimés efficacement et immédiatement après avoir satisfait à la condition souhaitée, éliminant ainsi le besoin de passes supplémentaires. à travers la liste.

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