關於STL erase的iterator失效問題

2021-07-04 23:38:55 字數 661 閱讀 5216

iterator中文經常被譯為「泛型指標」,在實際的使用中卻需要比指標更加小心翼翼。如果沒有注意到iterator失效,那麼產生的錯誤可能比普通指標更隱蔽,當然也可能會引起一般的程式異常。iterator失效主要有兩種情況:

1、iterator變數已經變成了「野指標」,對它進行*,++,--都會引起程式記憶體操作異常;

2、iterator所指向的變數已經不是你所以為的那個變數了。

所以在使用iterator是必須要時刻牢記「容器的插入和刪除元素」可能引起iterator失效!

在迴圈遍歷乙個容器時,需要根據條件刪除其中的某個元素,如何處理iterator?

對於非結點類,如陣列類的容器 vector,string,deque 容器標準寫法是這樣:

//vectorm_vector;

for(vector::iterator iter = m_vector.begin(); iter != m_vector.end();)

else

++iter;

}對於結點類容器(如:list,map,set)是這樣:

//mapm_map;

for(map::iterator iter = m_map.begin(); iter != m_map.end(); )

else

++iter;

}

stl erase 的正確使用

stl erase 正確使用 stl之map erase方法的正確使用 stl的map表裡有乙個erase方法用來從乙個map中刪除掉指令的節點 eg mapmaptest typedef map iterator iter iter iter maptest.find key maptest.er...

python中的iter迭代

具體解釋了怎麼用迭代,怎樣用迭代,怎樣轉換成迭代,可以看看 一 from collections.abc import iterable from collections.abc import iterator import time class person object def init sel...

python的iter 與next 函式

list tuple等都是可迭代物件,我們可以通過iter 函式獲取這些可迭代物件的迭代器。然後我們可以對獲取到的迭代器不斷使 next 函式來獲取下 條資料。iter 函式實際上就是調 了可迭代物件的iter 法。li 11 22,33 44,55 li iter iter li next li ...