我想根据索引删除 vector 的元素,比如所有偶数索引元素。 我已经阅读了有关 erase remove 习语的内容,但看不到如何应用它。 这是我尝试过的:
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() );
这将删除整个 vector 。我希望只删除已被删除算法标记的元素。
然后我试了一下
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() );
}
}
这再次不起作用,因为在删除时出现问题,索引似乎在迭代 vector 时移动。 实现这一目标的正确方法应该是什么。
最佳答案
从 0
到 size
,您最终会跳过一半的元素,因为索引随着您删除元素而改变。让你的 for
循环从 size()
到 0
:
for(unsigned int i = line.size(); i > 0; i--)
{
}
关于c++ - 根据索引移除 vector 元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8427691/