c++ - 根据索引移除 vector 元素

标签 c++ stl vector erase-remove-idiom

我想根据索引删除 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 时移动。 实现这一目标的正确方法应该是什么。

最佳答案

0size,您最终会跳过一半的元素,因为索引随着您删除元素而改变。让你的 for 循环从 size()0:

for(unsigned int i = line.size(); i > 0; i--)
{

}

关于c++ - 根据索引移除 vector 元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8427691/

相关文章:

C++/Cuda 模板

c++ - 搜索 vector 时出现问题?

c++ - 并行调用 std::vector 中的函数

c++ - 我们可以使用用户定义的类作为 STL 映射中的键吗?

c++ - 迭代器操作问题

matlab - 使用向量索引没有线性索引的矩阵

c++ - 使用 vector push_back 的内存分配

c++ - 如何使用子字符串的位置作为起点来显示字符串的内容?

C++ - 刷新 std::cout 后没有得到结果

c++ - 包含所述对象 vector 的对象的析构函数