在C 中,迭代映射並擦除元素可能會引起關注關於迭代器的有效性。行為因所使用的 C 版本而異。
在 C 11 中,erase() 方法已增強以返回迭代器到後續元素。這簡化了過程:
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 中,從映射中刪除元素不會自動使迭代器失效。但是,指向被刪除元素的迭代器將變得無效。為了保持迭代器的有效性,必須更新程式碼:
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; } }
這裡,在erase()呼叫中使用了後自增運算子( )來確保傳回的迭代器指向正確的元素。
以上是在 C 中迭代時刪除映射元素有什麼影響?的詳細內容。更多資訊請關注PHP中文網其他相關文章!