容器內使用remove時,慎重使用指標

2021-05-28 14:37:02 字數 1365 閱讀 9230

用vectorvedge儲存了邊,現在要把這些邊都刪除:

edge

(1,15) (1,29) (1,40) (15,1) (15,29) (15,40) (29,1) (29,15) (40,1) (40,15)

用如下**

for(int i=0;ipair pair=vedge.get(i);

system.out.println("check:"+pair);

system.out.println("remove edge: "+pair);

vedge.remove(pair);

}結果沒有全部刪除,列印資訊如下:

check:pair [a=1, b=15]

remove edge: pair [a=1, b=15]

check:pair [a=1, b=40]

remove edge: pair [a=1, b=40]

check:pair [a=15, b=29]

remove edge: pair [a=15, b=29]

check:pair [a=29, b=1]

remove edge: pair [a=29, b=1]

check:pair [a=40, b=1]

remove edge: pair [a=40, b=1]

這說明乙個問題:迭代器發生了問題,(1,15) 訪問之後沒有訪問(1,29),將之跳過,訪問了(1,40)...指標i指向出錯。

第一輪刪除,指標是1:

12  3  4  5  6  7  8  9  10 

第二輪刪除,指標是2:

234  5  6  7  8  9  10 

第三輪刪除,指標是3:

2   456  7  8  9  10 

第四輪刪除,指標是4:

2   4   678  9  10 

第五輪刪除,指標是5:

2   4   6  8910 

第六輪(實際沒有發生,判斷條件沒過,大小是5,指標卻是6):

2   4   6  8  10 

了解這個問題之後,修改**,使用iterator

for(iteratoriter=vedge.iterator();iter.hasnext();)

修改之後,一切正常,iter的指向正確,vector中的元素全部刪除。

注意:容器內使用remove要慎重,要知道當前訪問的物件和刪除的物件都是誰,這樣能避免bug!

容器內元素float時,容器自動高度的解決方案

先看html 如下 1 div id wrap 2 div id header 3 h1 three colums layout.h1 4div 56 div id content 7 div id main 8 p hello,css html.p 9 p i love this game.p 1...

如何在docker容器內使用systemctl

docker版本 root localhost gae proxy docker version client version 1.10.3 api version 1.22 package version docker common 1.10.3 46.el7.centos.10.x86 64 g...

使用iframe框架時,子頁面內跳轉整個頁面

由於開發需要,很多時候需要使用到iframe框架,即子頁面,子頁面使用是挺方便的,但如果子頁面呢需要跳轉整個頁面呢,比如我就遇到了乙個問題,我子頁面有個功能需要登入,所以連線的是登入頁面,但登入頁面只在子頁面中顯示,這就顯得很不合理了,在這裡,我介紹幾種方法,第一種,是比較大眾的方法,及子頁面內標籤...