In C 03, Durch das Löschen eines Elements in einer Karte wird der Iterator ungültig, der auf dieses Element zeigt. In C 11 und höher gibt die Erase-Methode jedoch den nächsten Iterator zurück, was eine sichere Iteration nach der Elemententfernung ermöglicht.
In C 03: Um eine sichere Iteration nach dem Entfernen von Elementen aus einer Karte zu gewährleisten, aktualisieren Sie Ihren Code, um den von map::erase() zurückgegebenen Iterator zu verwenden, und führen Sie eine Nachinkrementierung durch auf dem Iterator nach dem Aufruf von erase().
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 }
}
In C 11 und höher gibt erase() den nächsten Iterator zurück, wodurch das Iterieren und sicherer wird Entfernen Sie Elemente gleichzeitig mit der folgenden Syntax:
<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; }
}
Das obige ist der detaillierte Inhalt vonWas passiert, wenn ein Kartenelement während der Iteration in C gelöscht wird?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!