首頁 > 後端開發 > C++ > 當您在 C 迭代過程中刪除映射元素時會發生什麼?

當您在 C 迭代過程中刪除映射元素時會發生什麼?

Linda Hamilton
發布: 2024-12-15 16:02:11
原創
994 人瀏覽過

What Happens When You Erase a Map Element During Iteration in C  ?

如果在從 Begin 到 End 迭代時對映射元素呼叫擦除(),會發生什麼?

迭代在 C 中的 map 中,考慮迭代時擦除元素的行為非常重要。如果處理不當,此操作可能會導致意外結果。

C 11

在 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 中,從地圖中刪除元素迭代可能會導致迭代器無效。為了避免這個問題,您應該使用在擦除()操作之外遞增的循環變數來迭代映射。

以下程式碼示範了在 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中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板