Maison >développement back-end >C++ >Quelles sont les implications de la suppression d'éléments de carte lors d'une itération en C ?

Quelles sont les implications de la suppression d'éléments de carte lors d'une itération en C ?

Susan Sarandon
Susan Sarandonoriginal
2024-12-15 06:52:13623parcourir

What are the Implications of Removing Map Elements While Iterating in C  ?

Conséquences de l'effacement d'un élément de carte lors d'une itération en C

En C , parcourir une carte et effacer des éléments peut soulever des inquiétudes concernant la validité de l'itérateur. Le comportement varie en fonction de la version C utilisée.

C 11 et versions ultérieures

En C 11, la méthode delete() a été améliorée pour renvoyer l'itérateur à l’élément suivant. Cela simplifie le processus :

auto pm_it = port_map.begin();
while(pm_it != port_map.end()) {
    if (pm_it->second == delete_this_id) {
        pm_it = port_map.erase(pm_it);
    } else {
        ++pm_it;
    }
}

C 03

En C 03, l'effacement d'éléments d'une carte n'invalide pas automatiquement les itérateurs. Cependant, l'itérateur pointant vers l'élément supprimé devient invalide. Pour maintenir la validité de l'itérateur, le code doit être mis à jour :

map<string, SerialdMsg::SerialFunction_t>::iterator pm_it = port_map.begin();
while(pm_it != port_map.end()) {
    if (pm_it->second == delete_this_id) {
        port_map.erase(pm_it++); // Use iterator. Note the post increment
    } else {
        ++pm_it;
    }
}

Ici, l'opérateur de post-incrémentation ( ) est utilisé dans l'appel d'effacement() pour garantir que l'itérateur renvoyé pointe vers le bon élément.

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