std map中迭代器失效的問題

2021-06-16 22:26:59 字數 495 閱讀 1691

刪除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遍歷刪除某些...