C 向量函式erase在for迴圈下的錯誤用法

2022-07-17 14:18:22 字數 715 閱讀 4340

最近在看c++primer這本書,就內容來說確實很經典,對於初學c++的我來說增加了不少知識,不過今天在看有關向量一章節時對於課後習題的答案有所懷疑,在這裡就發表一下自己的看法:

相關題目如下:假設有如下ia定義,將ia 複製到乙個vector容器和乙個list容器中,使用單個迭代器引數版本的erase函式將list容器中的奇數值元素刪除,將vector容器中的偶數值刪除:

其中 ia=;

處於簡單考慮,我就將程式的主要部分內容分享下

int ia=;

vectorivec(ia,ia+11);

for(vector::iterator vit=ivec.begin();

vit!=ivec.end(); ++vit)

}如果向量中的第乙個元素是奇數,那麼這個程式並無錯誤,但當地乙個數十偶數的時候錯誤就產生了,我們知道當呼叫erase函式刪除元素p的時候,迭代器會自動指向下乙個元素,這裡我們可以假設為m,這時候如果我們再進行--vit,那麼迭代器就會指向乙個空的元素,進而產生錯誤;當然這種錯誤僅僅在於第乙個元素不符合條件的時候才會產生,也算**的乙個漏洞吧!在這裡我對**換了一種做法,這樣就不需要考慮第乙個資料奇偶的問題了,分享下:

vector::iterator iter=ivec.begin();

while(iter!=ivec.end())

else

{cout<<*iter《閒來無事寫的,如有不對的地方還望海涵海涵!

C 函式的用法 erase函式

前面的文章中提到過如何向容器中新增元素,這裡介紹乙個如何刪除容器中元素的函式,包括順序容器和關聯容器。就是這個erase函式,基本用法如下 c.erase p 從c中刪除迭代器p指定的元素,p必須指向c中的乙個真實元素,不能等於c.end c.erase b,e 從c中刪除迭代器對b和e所表示的範圍...

c 學習之容器 erase 函式

先介紹erase 函式的用法,erase 函式用於在順序型容器中刪除容器的乙個元素,有兩種函式原型,c.erase p c.erase b,e 第乙個刪除迭代器p所指向的元素,第二個刪除迭代器b,e所標記的範圍內的元素,c為容器物件,返回值都是乙個迭代器,該迭代器指向被刪除元素後面的元素 這個是重點...

C 中erase函式的用法

erase函式是乙個刪除容器中元素的函式,包括順序容器和關聯容器。基本用法如下 container.erase p 從container中刪除迭代器p指定的元素,p必須指向c中的乙個真實元素,不能等於container.end container.erase b,d 從container中刪除迭代器...