STL 迭代器 erase 的乙個錯誤用法

2021-06-26 16:55:01 字數 686 閱讀 8019

今天檢查出**的乙個異常,也怪自己太大意,習慣了ctrl+c/v。。

描述如下:

mapm_modulepoints;

for (map::iterator it = m_modulepoints.begin(); it != m_modulepoints.end(); it++)

}

那麼問題來了,iterator it 被erase後,for迴圈仍舊對齊進行++操作,導致異常。在沒有使用erase的情況下,我們確實可以使用這樣的for迴圈結構遍歷map,一旦需要erase,則不允許這樣做。

正確的做法之一:

for (map::iterator it = m_modulepoints.begin();  it != m_modulepoints.end(); )

else

}

利用erase函式的返回值可以避免這一問題。

另一種做法是:

for (map::iterator it = m_modulepoints.begin();  it != m_modulepoints.end(); )		

}

STL的erase 陷阱 迭代器失效總結

下面材料整理自internet 著作。stl中的容器按儲存方式分為兩類,一類是按以陣列形式儲存的容器 如 vector deque 另一類是以不連續的節點形式儲存的容器 如 list set map 在使用erase方法來刪除元素時,需要注意一些問題。1.list,set,map容器 在使用 lis...

學習STL,實現乙個單鏈表的迭代器

stl原始碼剖析中,空間配置器和迭代器屬於比較晦澀難懂的兩章,這裡學習了stl迭代器後也嘗試自己寫乙個迭代器,實現單鏈表的迭代器,實現不難,可以說是乙個玩具而已,但是能夠幫助我們理解stl迭代器的基本原理。宣告 templateclass listiterator templateclass lin...

乙個hibernate mapping的錯誤

在使用hibernate對映的時候 如果配置 onetomany cascade cascadetype.persist,fetch fetchtype.eager joincolumn name orderid referencedcolumnname order id private setbu...