今天在刪除vector中的元素中遇到乙個問題,這裡記錄下來以便以後查閱。
預備知識:用到了erase()函式,對於乙個容器c來說,假設迭代器為p,那麼執行:
c.erase(p)之後就刪除了容器c中p所指向的元素,並且返回乙個迭代器,返回的迭代器指向剛才所刪除元素後面的乙個元素(這裡是關鍵)!
有了上面的知識後,我編寫了下面的**(標頭檔案略去),刪去向量vals中的1:
1編譯通過,但是除錯就報錯:intmain()221
else
22 ++itr;23}
24 itr =vals.begin();
2526
while(itr !=vals.end())
2731
return0;
32 }
所以我進行了斷點除錯,發現第乙個1可以成功刪除,但是第二次試圖遍歷vals的時候,就會報錯,看半天**,無果,在網上搜了一些帖子,終於知道,原來,容器在刪除或者插入乙個元素之後,原來的迭代器會失效,於是第二次遍歷時的判斷條件還繼續用原來的迭代器,系統無法判斷是什麼東西,於是報錯,怎麼解決呢?但是c++設計者早就為我們鋪好了路,雖然erase()使得原來的迭代器失效了,但是上面說過,erase()會返回乙個迭代器,返回的迭代器指向剛才所刪除元素後面的乙個元素,於是我們就要利用好這個返回的迭代器,更改**如下:
就是把上面**中的第19行改為:
itr = vals.erase(itr);這樣,原來的迭代器失效了,但是返回的迭代器又重新賦給了itr,於是工作可以繼續了,執行結果如下:
所以說看一百遍不如自己親自實踐一遍,看似簡單的問題,沒想到花了如此長的時間,事無鉅細,實踐為真!
vector 之刪除元素
刪除指定位置的元素 刪除vector中第5個位置的元素 1 vector vec 執行vector初始化操作 2 vector iterator iter vec.begin 5 獲取第五個元素的iterator 3 vec.erase iter 刪除第五個元素 刪除重複元素 刪除vector中的重...
Vector容器刪除元素
使用vector容器也有一段時間了,但是對於他的刪除操作還是有點疑問,今天就總結一下。vector資料儲存是一段預先分配好大小的記憶體連續的空間,插入資料和刪除資料都會引起後面資料記憶體的整體移動。今天就說說刪除操作吧 1 刪除最後的元素 直接使用pop back 就可以了,這個沒什麼好說的 2 刪...
C 中引用vector中元素會出現的問題
description author szq github date 2020 08 18 16 11 29 lasteditors szq lastedittime 2020 08 18 16 16 51 filepath cpp src test.cpp include include usin...