list中使用erase迭代器失效

2021-06-07 01:49:23 字數 369 閱讀 8855

當list使用erase時,會使當前被刪除元素的迭代器失效,如何解決這一問題。

看c++primer中是採取以下第一種方法

1)for (list::iterator iter=l.begin();iter!=l.end();++iter)

}在寫測試程式時,發現該種方法會有bug,即當我剛好滿足條件需刪去的值為list中第乙個值時,此時刪除後iter指向當前list中的第乙個值,但是--iter操作會導致程式dump,因為--操作會使iter指向未知記憶體。

故只能採取網上公認的第二種方法,才會保證無誤。

2)for (list::iterator iter=l.begin();iter!=l.end;)

else

}

容器list使用之erase

程式裡面使用了list容器,其中用到了erase 函式。花了點時間,搞清楚了erase 函式的機理。常用的刪除容器中元素的方法是如下 方法1 list int list list int iterator iter for iter list.begin iter list.end else 也可以...

容器list使用之erase

今天程式裡面使用了list容器,其中用到了erase 函式,程式竟然崩潰了,之前一直沒出現問題,感覺莫名奇妙。花了點時間,搞清楚了erase 函式的機理。常用的刪除容器中元素的方法是如下 方法1 list int list list int iterator iter for iter list.b...

vector中使用erase刪除元素

很容易受陣列的影響,寫出如下 std vecotr iterator it vc.begin for it vc.end it 原因是vector中在刪除乙個元素後,迭代器會自動指向下乙個元素。所以,上面的 很可能導致迭代器越界。the c standard library 中解釋 c.erase ...