相关疑难解决方法(0)

如何通过索引从std :: vector <>中删除元素?

我有一个std :: vector <int>,我想删除第n个元素.我怎么做?

std::vector<int> vec;

vec.push_back(6);
vec.push_back(-17);
vec.push_back(12);

vec.erase(???);
Run Code Online (Sandbox Code Playgroud)

c++ stl vector erase

464
推荐指数
10
解决办法
69万
查看次数

从矢量中删除元素

我想使用erase方法从向量中清除元素.但是这里的问题是元素不能保证在向量中只出现一次.它可能存在多次,我需要清除所有这些.我的代码是这样的:

void erase(std::vector<int>& myNumbers_in, int number_in)
{
    std::vector<int>::iterator iter = myNumbers_in.begin();
    std::vector<int>::iterator endIter = myNumbers_in.end();
    for(; iter != endIter; ++iter)
    {
        if(*iter == number_in)
        {
            myNumbers_in.erase(iter);
        }
    }
}

int main(int argc, char* argv[])
{
    std::vector<int> myNmbers;
    for(int i = 0; i < 2; ++i)
    {
        myNmbers.push_back(i);
        myNmbers.push_back(i);
    }

    erase(myNmbers, 1);

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

这段代码显然崩溃了,因为我在迭代它时改变了向量的末尾.实现这一目标的最佳方法是什么?也就是说有没有办法做到这一点,而无需多次迭代矢量或创建一个矢量的副本?

c++ stl vector erase

94
推荐指数
3
解决办法
13万
查看次数

根据索引删除矢量元素

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

    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 :: vector中的特定索引中删除

假设我有一个带有5个元素的std :: vector,我需要删除索引1和3中的元素,这是最快的方法.标准库中是否有任何帮助方法可以为我执行此操作?

c++ vector

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

标签 统计

c++ ×4

vector ×4

stl ×3

erase ×2

erase-remove-idiom ×1