#include <iostream>
#include <algorithm>
#include <vector>
typedef int MyType;
using namespace std;
int main()
{
std::vector <MyType> vec1; //假设这里永远不会存放-1
std::vector <std::size_t> vec2;
for(int i=0;i<10;i++)
{
vec1.push_back(i);
if (i%2) vec2.push_back(i);
}
vector <size_t>::iterator iter=vec2.begin();
for(;iter!=vec2.end();++iter)
{
if (*iter<vec1.size())
vec1[*iter] = -1; //标志删除位
}
vec1.erase(remove(vec1.begin(),vec1.end(),-1),vec1.end());//重点
for(int i=0;i<vec1.size();i++) cout<<vec1[i]<<endl;
return 0;
}
std::remove(first,last,val)
移除[first, last)范围内等于val的元素
在vector里面用就类似于
iter = std::remove(vec.begin(), vec.end(), val)
但这个函数只是把val移到vec的末尾,并不真正删除
未被remove的元素整体前移