vector erase 函式呼叫出錯問題

2021-08-07 18:24:29 字數 960 閱讀 2851

vector::erase()方法有兩種過載形式

iterator erase(   iterator _where);//刪除某個元素

iterator erase(   iterator _first,   iterator _last);//刪除一段元素,注意是個半開區間

返回值:

如果是刪除指定位置的元素時,

返回值是乙個迭代器,指向刪除元素下乙個元素;如果是刪除某範圍內的元素時:返回值也表示乙個迭代器,指向最後乙個刪除元素的下乙個元素;

如下**:

#include "stdafx.h"

#include

#include

using namespace std;

int _tmain(int argc, _tchar* argv)

}  return 0;}

乍一看這段**,很正常。其實這裡面隱藏著乙個很嚴重的錯誤:當veci.erase(iter)之後,iter就變成了乙個野指標,對乙個野指標進行 iter++ 是肯定會出錯的。

for迴圈做如下改動:

for(iter = v1.begin(); iter != v1.end(); iter++)  

}  **仍然是錯誤的。為什麼呢?????

斷點單步除錯發現兩個問題:

(1)兩個連續的10,只刪掉了乙個??

原因是刪掉第乙個10後,iter指向了第二個10的位置,然後iter++,跳過了這個10.

(2)刪除最後乙個10時出現問題??

原因是結尾的10刪掉後,iter指向了v1.end()位置,再iter++肯定有錯。

所以這種寫法(1)不能刪除連續的值(2)不能刪除末尾的值,會報錯

正確的**應該為:

for(iter = v1.begin(); iter != v1.end(); )  

else

iter++;

}  

vector erase 容器刪除

vector erase 從指定容器刪除指定位置的元素或某段範圍內的元素 vector erase 方法有兩種過載形式 如下 iterator erase iterator where 1.iterator erase iterator first,iterator last 如果是刪除指定位置的元...

一道筆試題 vector erase

vector erase 從指定容器刪除指定位置的元素或某段範圍內的元素 vector erase 方法有兩種過載形式 如下 iterator erase iterator where iterator erase iterator first,iterator last 如果是刪除指定位置的元素時...

系統呼叫 函式呼叫

linux下對檔案操作有兩種方式 提供了庫函式,如open close read write ioctl 等,需包含標頭檔案unistd.h。以write 函式為例 其函式原型為size t write int fd,const void buf,size t nbytes 其操作物件為檔案控制代碼...