我想基于索引删除向量的元素,比如所有偶数索引元素.我已经阅读了关于擦除删除习惯用法,但看不到如何应用它.这是我试过的:
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() );
Run Code Online (Sandbox Code Playgroud)
这会擦除整个矢量.我希望只删除已删除算法标记的元素.
然后我尝试了这个
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() );
}
}
Run Code Online (Sandbox Code Playgroud)
由于在移除时存在问题,这再次不起作用,索引似乎在迭代矢量时移位.应该采取什么样的正确方法来实现这一目标.
我有两个相等长度的向量,我想根据其中一个向量中的条件从中删除元素.应对两者应用相同的删除操作,以使索引匹配.
我提出了一个使用的解决方案std::erase,但它非常慢:
vector<myClass> a = ...;
vector<otherClass> b = ...;
assert(a.size() == b.size());
for(size_t i=0; i<a.size(); i++)
{
if( !a[i].alive() )
{
a.erase(a.begin() + i);
b.erase(b.begin() + i);
i--;
}
}
Run Code Online (Sandbox Code Playgroud)
有没有办法可以更有效地执行此操作,最好使用stl算法?