stl map高效遍历删除的方法
生活随笔
收集整理的這篇文章主要介紹了
stl map高效遍历删除的方法
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
for(;iter!=mapStudent.end();) { if((iter->second)>=aa) { //滿足刪除條件,刪除當前結點,并指向下面一個結點 mapStudent.erase(iter++); } else { //條件不滿足,指向下面一個結點 iter++; } } 這種刪除方式也是STL源碼一書中推薦的方式,分析 mapStudent.erase(iter++)語句,map中在刪除iter的時候,先將iter做緩存,然后執行iter++使之指向下一個結點,再進入erase函數體中執行刪除操作,刪除時使用的iter就是緩存下來的iter(也就是當前iter(做了加操作之后的iter)所指向結點的上一個結點)。 ????根據以上分析,可以看出mapStudent.erase(iter++)和map Student.erase(iter); iter++;這個執行序列是不相同的。前者在erase執行前進行了加操作,在iter被刪除(失效)前進行了加操作,是安全的;后者是在erase執行后才進行加操作,而此時iter已經被刪除(當前的迭代器已經失效了),對一個已經失效的迭代器進行加操作,行為是不可預期的,這種寫法勢必會導致 map操作的失敗并引起進程的異常。
總結
以上是生活随笔為你收集整理的stl map高效遍历删除的方法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 设备及分辨率
- 下一篇: 报考提前批军校体检是在录取之前吗?是不是