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 如果是刪除指定位置的元素時...