首頁 > 後端開發 > C++ > 在 C 中迭代時刪除映射元素有什麼影響?

在 C 中迭代時刪除映射元素有什麼影響?

Susan Sarandon
發布: 2024-12-15 06:52:13
原創
621 人瀏覽過

What are the Implications of Removing Map Elements While Iterating in C  ?

在C 迭代期間擦除映射元素的後果

在C 中,迭代映射並擦除元素可能會引起關注關於迭代器的有效性。行為因所使用的 C 版本而異。

C 11 及更高版本

在 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

在 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中文網其他相關文章!

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