remove
算法描述:查找的得到第一個(gè)元素的位置,然后從此位置開(kāi)始遍歷容器,將后面的元素依次前移,跳過(guò)和value相同值的元素,也就是說(shuō),所有和value相
同值的元素都會(huì)被覆蓋,而其他的元素都會(huì)依次前移。最后remove返回"指向最后一個(gè) '有用'
元素的iterator",但是在remove算法過(guò)程中,并沒(méi)有修改原容器的size,以及end()。但是從邏輯角度看,最后的[
從remove得到的iterator---_result, 容器的結(jié)尾end() )
這個(gè)區(qū)間里面的元素已經(jīng)沒(méi)有意義了。所以這些元素不應(yīng)該屬于該容器了。remove算法能做的僅此而已,并沒(méi)有刪除這些無(wú)用的元素。
結(jié)論:移除容器里面的元素不應(yīng)該使用remove算法,而是容器自己的方法erase()。
erase使用:
#include <iostream>
#include <vector>
using namespace std;
int main()
{
vector<int> arr;
arr.push_back(6);
arr.push_back(7);
arr.push_back(8);
arr.push_back(9);
for(vector<int>::iterator it=arr.begin(); it!=arr.end(); )
{
if(* it == 8)
{
it = arr.erase(it);
}
else
{
++it;
}
}
//注意上面不能寫(xiě)成
/*
for(vector<int>::iterator it=arr.begin(); it!=arr.end(); it ++)
{
if(* it == 8)
{
arr.erase(it); //在erase后,it失效,并不是指向vector的下一個(gè)元素,it成了一個(gè)“野指針”。
}
}
*/
}