for(;iter!=mapstudent.end();)
else
}這種刪除方式也是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遍歷和刪除的方法
for iter mapstudent.end else 這種刪除方式也是stl原始碼一書中推薦的方式,分析 mapstudent.erase iter 語句,map中在刪除iter的時候,先將iter做快取,然後執行iter 使之指向下乙個結點,再進入erase函式體中執行刪除操作,刪除時使用的i...
java 高效的hashmap遍歷方法
hashmap的遍歷,key和value通常的方法有兩種,及使用entryset或者keyset遍歷,下面我們來看下例項。public class testhashmap for iteratoriterator map.keyset iterator iterator.hasnext long t...
STL map的使用方法
一map內部資料的組織 map內部自建一顆紅黑樹 一種非嚴格意義上的平衡二叉樹 這顆樹具有對資料自動排序的功能,所以在map內部所有的資料都是有序的,後邊我們會見識到有序的好處。二 map的建構函式 map共提供了6個建構函式,這塊涉及到記憶體分配器這些東西,略過不表,在下面我們將接觸到一些map的...