C STL中迭代器失效問題

2021-08-13 21:57:22 字數 684 閱讀 3886

其實,在我們學習過程中,c++ stl使我們必須要用的乙個庫,裡面整合了很多的資料結構和演算法,這些在我們寫程式的時候,用的特別多。但是,使用這些,我們經常會出現一些問題,畢竟c++中記憶體的申請和釋放都是程式設計師親自去做的,所以說,在使用stl的時候,我們也會遇到很多問題,其中乙個就是我們所謂的迭代器。

迭代器,其實我們用通俗的理解就是類似於我們使用指標去遍歷陣列,然後訪問元素,而且迭代器類似於我們所謂的指標。

在stl中,我們一般分成這麼幾類:

1.序列容器:也就是把具有相同型別t的物件,用嚴格的線性組織到一起。當然,我們也可以認為是陣列和鍊錶的推廣,我們一般說的序列容器有三種:

(1).vector(陣列),提供快速隨機訪問。

迭代器在刪除插入的時候會導致迭代器失效,因為記憶體重新的分配,導致迭代器失效。

(2).queue

1.在deque容器首部或者尾部插入元素不會使得任何迭代器失效。

2.在其首部或尾部刪除元素則只會使指向被刪除元素的迭代器失效。

3.在deque容器的任何其他位置的插入和刪除操作將使指向該容器元素的所有迭代器失效。

(3).list

刪除時,指向該刪除節點的迭代器失效

2.關聯容器:支援通過鍵來高效地查詢和讀取元素

(1)map

(2)set

刪除時,指向該刪除節點的迭代器失效

C STL 迭代器失效問題

之前看 c primier 的時候,也解到在順序型視窗裡insert erase會涉及到迭代器失效的問題,並沒有深究。今天寫程式的時候遇到了這個問題。最初我的程式是醬紫的,別說話,我知道這樣是有問題的,可這樣是最直觀的想法 int arr vector int a arr,arr sizeof ar...

C STL 迭代器失效

2 刪除 當進行刪除操作 erase,pop back 後,指向刪除點的迭代器全部失效 指向刪除點後面的元素的迭代器也將全部失效。刪除點之前的迭代器仍有效。二 deque迭代器的失效情況 1 插入 1 在deque容器首部或者尾部插入元素不會使得任何迭代器失效。但是指向存在的元素的引用和指標不會失效...

C STL迭代器失效

迭代器失效就是說,對容器進行了一些操作後,先前的迭代器無法進行解引用操作去訪問容器的元素。迭代器失效可能會造成程式崩潰,如下圖 如果插入元素導致vector達到最大容量,那麼會重新分配記憶體並將老的元素拷貝到新的記憶體中。元素的位址都改變了,顯然迭代器和引用都將失效 如果插入元素沒有引起重新分配記憶...