在c ++中弹出一个向量的特定元素

kam*_*lot 8 c++ vector

所以假设我有一个名为v的向量,它有三个元素:1,2,3

有没有办法从矢量中专门弹出2,这样得到的矢量就变成了

1,3

Dag*_*ang 22

//erase the i-th element
myvector.erase (myvector.begin() + i);
Run Code Online (Sandbox Code Playgroud)

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

  • @kamikaze_pilot:你确定你可以用 python 列表做到这一点吗? (2认同)
  • 在 Python 中,`pop` 按索引删除一个项目(Todd 的回答),`remove` 按值删除一个项目(我的回答)。 (2认同)

Ken*_*oom 16

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

#include<vector>
#include<algorithm>

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

(我使用C++ 0X,以避免一些样板,但实际使用std::findvector::erase不需要的C++ 0x)

  • @kamikaze:最糟糕的当然是"O(n)",也就是说它需要搜索整个向量.如果你有一个有序矢量,你可以尝试[`lower_bound`](http://www.cplusplus.com/reference/algorithm/lower_bound/) (2认同)

Chr*_* A. 7

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