在C++中,从vector中弹出特定元素

mv1qrgav  于 2023-10-20  发布在  其他
关注(0)|答案(5)|浏览(197)

假设我有一个向量v,它有三个元素:{1,2,3}
有没有一种方法可以专门从向量中弹出2,这样得到的向量就变成了{1,3}

qcuzuvrc

qcuzuvrc1#

//erase the i-th element
myvector.erase (myvector.begin() + i);

(将向量中的第一个元素计数为i=0

z9smfwbn

z9smfwbn2#

假设您正在查找包含值2的元素,而不是索引2处的值。

#include<vector>
#include<algorithm>

int main(){
   std::vector<int> a={1,2,3};
   a.erase(std::find(a.begin(),a.end(),2));
}

(我使用C0x是为了避免一些样板文件,但实际使用std::findvector::erase并不需要C0x)

lzfw57am

lzfw57am3#

另外,如果要删除多个元素,请记住使用erase-remove idiom

aor9mmx1

aor9mmx14#

#include <iostream>
#include <vector>
using namespace std;

int main ()
{
  unsigned int i;
  vector<unsigned int> myvector;

  // set some values (from 1 to 10)
  for (i=1; i<=10; i++) myvector.push_back(i);

  // erase the 6th element
  myvector.erase (myvector.begin()+5);

  // erase the first 3 elements:
  myvector.erase (myvector.begin(),myvector.begin()+3);

  cout << "myvector contains:";
  for (i=0; i<myvector.size(); i++)
    cout << " " << myvector[i];
  cout << endl;

  return 0;
}
o7jaxewo

o7jaxewo5#

C++ 20开始,我们可以使用std::erase来删除多个元素。
(no需要“erase-remove idiom“)

#include <iostream>
#include <vector>

int main()
{
    std::vector<int> v{1,2,2,3,4,5};
      
    std::erase(v, 2);
    
    for(auto e : v) std::cout << e << " ";
    std::cout << '\n';

    // output: 1 3 4 5
}

相关问题