迭代器失效的問題,與容器的底層的資料結構有關。
當遍歷迭代器的時候,每一次都會判斷當前迭代器是否已經到達末尾的迭代器
當(底層時乙個可動態擴容的陣列,資料的增加與刪除都會影響到其他的資料的位置,所以當進行資料增刪的時候,其他資料的迭代器有可能會失效)
當插入(push_back)乙個元素後,end操作返回的迭代器肯定失效。
當進行刪除操作(erase,pop_back)後,指向刪除點的迭代器全部失效;指向刪除點後面的元素的迭代器也將全部失效。
(底層時乙個可動態擴容的陣列,資料的增加與刪除都會影響到其他的資料的位置,所以當進行資料增刪的時候,其他資料的迭代器有可能會失效)
在deque容器首部或者尾部插入元素不會使得任何迭代器失效。
在其首部或尾部刪除元素則只會使指向被刪除元素的迭代器失效。
在deque容器的任何其他位置的插入和刪除操作將使指向該容器元素的所有迭代器失效。
刪除乙個元素的時候,只有當前的迭代器失效,其前後的迭代器不會失效
新增乙個元素的時候,迭代器不會失效
(記憶體不是連續的,所以節點的增刪不會影響到其他節點的儲存,所以在進行資料的增刪的時候,其他節點的迭代器不會失效)
關聯容器刪除乙個元素的時候,當前的迭代器會失效,其他的迭代器不會失效,增加乙個元素的時候,迭代器不會失效
關聯容器底層的資料結構
有序關聯容器->>紅黑樹(每個資料乙個節點,所以其他資料的刪除不影響當前節點的記憶體的位置)
無序關聯容器->>雜湊表(鏈式雜湊表,每個資料儲存佔據乙個節點,所以增刪操作,資料之間相互不影響)
迭代器失效問題
下面材料整理自internet 著作。stl中的容器按儲存方式分為兩類,一類是按以陣列形式儲存的容器 如 vector deque 另一類是以不連續的節點形式儲存的容器 如 list set map 在使用erase方法來刪除元素時,需要注意一些問題。在使用 list set 或 map遍歷刪除某些...
迭代器失效問題
在序列容器裡,刪除了當前的iterator 導致後邊所有元素的迭代器都會失效 增加乙個元素也會導致後邊的元素進行移動 因為vector deque是序列容器,使用連續分配的記憶體,刪除當前元素,後邊的所有元素都會向前移動乙個位置,之後資料的位址發生了變化,之前的迭代器根據原有容器的資訊訪問不到正確的...
迭代器失效問題
在序列容器裡,刪除了當前的iterator 導致後邊所有元素的迭代器都會失效 增加乙個元素也會導致後邊的元素進行移動 因為vector deque是序列容器,使用連續分配的記憶體,刪除當前元素,後邊的所有元素都會向前移動乙個位置,之後資料的位址發生了變化,之前的迭代器根據原有容器的資訊訪問不到正確的...