在 C 03 中,刪除映射中的元素會使指向該元素的迭代器無效。然而,在 C 11 及更高版本中,擦除方法會傳回下一個迭代器,從而允許在刪除元素後進行安全迭代。
在C 中03,為了確保從映射中刪除元素後的安全迭代,請更新程式碼以使用map::erase () 傳回的迭代器並執行後增量呼叫erase()後的迭代器。
map<string serialdmsg::serialfunction_t>::iterator pm_it = port_map.begin();<br>while(pm_it != port_map.end())<br>{<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 }
}
在C 11 及更高版本中,erase()傳回下一個迭代器,使其安全使用以下語法同時迭代和刪除元素:
<br>auto pm_it = port_map.begin();<br>while(pm_it != port_map.end())<br>{<pre class="brush:php;toolbar:false">if (pm_it->second == delete_this_id) { pm_it = port_map.erase(pm_it); } else { ++pm_it; }
}
以上是在 C 迭代過程中刪除映射元素時會發生什麼?的詳細內容。更多資訊請關注PHP中文網其他相關文章!