刪除std::map m中的元素,如果用迭代器操作:
std::map::iterator it = m.begin ();
for ( ; it != m.end(); ++it)
m.eraser (it);
這樣做會出問題,因為被eraser後迭代器失效,再進行++就會down機
如果這樣
std::map::iterator it = m.begin ();
for ( ; it != m.end(); )
m.eraser (it++);
這樣就沒問題了,因為先進行迭代器++後刪除迭代器,所以就沒有問題了,相當於下面的**
std::map::iterator it = m.begin ();
for ( ; it != m.end(); )
std::map::iterator tmp_it = it;
++it;
m.eraser (tmp_it );
C STL中迭代器失效問題
其實,在我們學習過程中,c stl使我們必須要用的乙個庫,裡面整合了很多的資料結構和演算法,這些在我們寫程式的時候,用的特別多。但是,使用這些,我們經常會出現一些問題,畢竟c 中記憶體的申請和釋放都是程式設計師親自去做的,所以說,在使用stl的時候,我們也會遇到很多問題,其中乙個就是我們所謂的迭代器...
STL中迭代器失效問題
對於vector deque等連續儲存的容器來說,插入元素 insert 或者刪除元素 erase 會導致後邊的迭代器都失效,解決方法是,erase iter 會返回下乙個有效迭代器的值,刪除元素時用將當前迭代器賦值為erase的返回值,系統會自動將迭代器的指向修改的。for iter cont.b...
迭代器失效問題
下面材料整理自internet 著作。stl中的容器按儲存方式分為兩類,一類是按以陣列形式儲存的容器 如 vector deque 另一類是以不連續的節點形式儲存的容器 如 list set map 在使用erase方法來刪除元素時,需要注意一些問題。在使用 list set 或 map遍歷刪除某些...