【发布时间】:2012-01-15 16:40:32
【问题描述】:
我想根据索引删除向量的元素,比如所有偶数索引元素。 我已阅读有关擦除删除习语的信息,但看不到如何应用它。 这是我尝试过的:
vector<int> line;
line.reserve(10);
for(int i=0;i<10;++i)
{
line.push_back(i+1);
}
for(unsigned int i=0;i<line.size();++i)
{
//remove the even indexed elements
if(i%2 == 0)
{
remove(line.begin(),line.end(),line[i]);
}
}
line.erase( line.begin(),line.end() );
这会擦除整个向量。我希望只删除已被删除算法标记的元素。
然后我尝试了这个
for(unsigned int i=0;i<line.size();++i)
{
//remove the even indexed elements
if(i%2 == 0)
{
line.erase( remove(line.begin(),line.end(),line[i]),line.end() );
}
}
这再次不起作用,因为删除时出现问题,索引似乎在迭代向量时发生了变化。 完成此任务的正确方法应该是什么。
【问题讨论】:
标签: c++ stl vector erase-remove-idiom