相关疑难解决方法(0)

根据索引删除矢量元素

我想基于索引删除向量的元素,比如所有偶数索引元素.我已经阅读了关于擦除删除习惯用法,但看不到如何应用它.这是我试过的:

    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)

由于在移除时存在问题,这再次不起作用,索引似乎在迭代矢量时移位.应该采取什么样的正确方法来实现这一目标.

c++ stl vector erase-remove-idiom

5
推荐指数
2
解决办法
7694
查看次数

如何根据另一个向量中的条件从向量中删除元素?

我有两个相等长度的向量,我想根据其中一个向量中的条件从中删除元素.应对两者应用相同的删除操作,以使索引匹配.

我提出了一个使用的解决方案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算法?

c++ stl

2
推荐指数
1
解决办法
1137
查看次数

标签 统计

c++ ×2

stl ×2

erase-remove-idiom ×1

vector ×1