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

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

Patricia Arquette
發布: 2024-12-16 15:24:11
原創
293 人瀏覽過

What Happens When Erasing a Map Element During Iteration in C  ?

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

在 C 03 中,刪除映射中的元素會使指向該元素的迭代器無效。然而,在 C 11 及更高版本中,擦除方法會傳回下一個迭代器,從而允許在刪除元素後進行安全迭代。

C 03 的解決方案

在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 及更高版本的解

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

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