En C 03, l'effacement d'un élément dans une carte invalide l'itérateur pointant vers cet élément. Cependant, en C 11 et versions ultérieures, la méthode d'effacement renvoie l'itérateur suivant, permettant une itération sûre après la suppression de l'élément.
En C 03, pour garantir une itération sûre après la suppression d'éléments d'une carte, mettez à jour votre code pour utiliser l'itérateur renvoyé par map::erase() et effectuez post-incrémentation sur l'itérateur après avoir appelé effacer().
map<string, SerialdMsg::SerialFunction_t>::iterator pm_it = port_map.begin();<br>while(pm_it != port_map.end())<br>{</p> <div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:php;toolbar:false">if (pm_it->second == delete_this_id) { port_map.erase(pm_it++); // Use iterator. // Note the post increment. // Increments the iterator but returns the // original value for use by erase } else { ++pm_it; // Can use pre-increment in this case // To make sure you have the efficient version }
}
En C 11 et versions ultérieures, Eraser() renvoie l'itérateur suivant, ce qui permet de itérer et supprimer des éléments simultanément en utilisant la syntaxe suivante :
<br>auto pm_it = port_map.begin();<br>while(pm_it != port_map.end())<br>{ </p> <div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:php;toolbar:false">if (pm_it->second == delete_this_id) { pm_it = port_map.erase(pm_it); } else { ++pm_it; }
}
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!