保持std :: vector <>的前N个元素并删除其余元素

Bre*_*ett 24 c++ vector

std::vector<int>我的C++应用程序中有一个变量.矢量的大小在运行时确定,但通常是约1000.

我已经对这个向量进行了排序(效果很好),排序后,我只想保留第一个50元素.

我试过了:

kpts.erase(kpts.begin() + 50, kpts.end());
Run Code Online (Sandbox Code Playgroud)

kpts我的矢量在哪里,表现太可怕了!大概是因为这种方式erase运作.

有没有办法只保留50向量的第一个元素?看起来应该是显而易见的,但我找不到办法做到这一点.

Mor*_*itz 44

是的,您可以使用std::vector::resize,如果向量的长度大于n,则只会截断.

见这里:http://www.cplusplus.com/reference/vector/vector/resize/

std::vector<int> myvector;

for (int i=1;i<1000;i++) myvector.push_back(i);

myvector.resize(50);
// myvector will contain values 1..50
Run Code Online (Sandbox Code Playgroud)

  • @chris,它们都是 O(n),但是 resize 更干净(恕我直言。)此外,*在实践中*稍微*更有效,因为您不必调用 begin() 和 end() 来获取迭代器。 (2认同)