vector erase 容器刪除

2021-06-27 19:27:17 字數 1289 閱讀 3121

vector::erase():從指定容器刪除指定位置的元素或某段範圍內的元素

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

如下:iterator erase( 

iterator _where);

1.iterator erase( 

iterator _first, 

iterator _last);

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

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

首先我先把msdn上的例子po上來

// vector_erase.cpp

// compile with: /ehsc

#include

#include

int main( ) 

output

v1 = 10 20 30 40 50

v1 = 20 30 40 50

v1 = 20 50

大家可以知道,需刪除元素10只要指定該元素對應的迭代器傳給erase就ok了;

那現在如果該容器中有兩個元素10要怎麼刪除呢?

接著我做下修改,向容器中新增一新的元素10

v1.push_back( 10 );

大多數初學者在不熟知erase的原理的時候,也會像我一樣這樣處理,

一一遍歷容器找到元素值為10,然後一一刪除

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

當試著重新build程式後執行,會出現包含有如下資訊的錯誤

_myptr < ((_myvec *)(this->_mycont))->_mylast

其他出現這種原因是沒搞懂erase的原理,當呼叫erase()後iter迭代器就失效了,變成了一野指標。

所以要處理這種問題,關鍵是要解決呼叫erase()方法後,iter迭代器變成野指標的問題,

這個時候呢給他賦乙個新的迭代器給他。

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

重新iter迭代器指定下乙個元素.

上面那種方法是給iter重新賦於新v1的begin迭代器。

還有一種方法是直接賦刪除元素的下乙個迭代器給iter

實現方法的**如下:

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

if(iter == v1.end()) //要控制迭代器不能超過整個容器  }

vector erase 函式呼叫出錯問題

vector erase 方法有兩種過載形式 iterator erase iterator where 刪除某個元素 iterator erase iterator first,iterator last 刪除一段元素,注意是個半開區間 返回值 如果是刪除指定位置的元素時,返回值是乙個迭代器,指向...

docker 刪除容器

docker kill docker ps a q 刪除所有已經停止的容器 docker rm docker ps a q 刪除所有未打 dangling 標籤的映象 docker rmi docker images q f dangling true 刪除所有映象 docker rmi docke...

一道筆試題 vector erase

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