今天檢查出**的乙個異常,也怪自己太大意,習慣了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...