remove算法描述:
查找得到第一个元素的位置,然后从此位置开始遍历容器,将后面的元素依次前移,跳过和value相同值的元素,也就是说,所有和value相同值的元素都会被覆盖,而其他的元素都会依次前移。最后remove返回“指向最后一个'有用'元素的iterator”,但是在remove算法过程中,并没有修改元容器的size,以及end()。但是从逻辑角度看,最后的[从remove得到的iterator--------result,容器的结尾end())这个区间里面的元素已经没有意义了。所以这些元素不应该属于该容器了。remove算法能做的仅此而已,并没有删除这些无用的元素。
结论:移除容器里边的元素不应该使用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;