迭代在 C 中的 map 中,考慮迭代時擦除元素的行為非常重要。如果處理不當,此操作可能會導致意外結果。
在 C 11 中,erase() 方法已得到改進,現在是一致的涵蓋所有容器類型。當刪除一個元素時,erase() 方法會傳回下一個迭代器。這允許您繼續迭代映射而不會遇到任何問題。
以下程式碼示範了在C 11 迭代時從映射中刪除元素的正確方法:
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 中,從地圖中刪除元素迭代可能會導致迭代器無效。為了避免這個問題,您應該使用在擦除()操作之外遞增的循環變數來迭代映射。
以下程式碼示範了在 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. // 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 迭代過程中刪除映射元素時會發生什麼?的詳細內容。更多資訊請關注PHP中文網其他相關文章!