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
Libérer: 2024-12-15 06:52:13
original
621 Les gens l'ont consulté

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;
    }
}
Copier après la connexion

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;
    }
}
Copier après la connexion

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!

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