从std :: vector中删除前N个元素

For*_*ing 24 c++ stdvector

我似乎无法想到一个可靠的方法(也压缩内存)从std :: vector中删除前N个元素.怎么会这样做呢?

Mar*_*som 36

既然你提到要压缩内存,最好将所有内容复制到一个新的向量并使用交换习惯用法.

std::vector<decltype(myvector)::value_type>(myvector.begin()+N, myvector.end()).swap(myvector);
Run Code Online (Sandbox Code Playgroud)

  • .或更简洁地说,`的std ::矢量<myvector :: VALUE_TYPE>(myvector.begin()+ N,myvector.end())交换(myvector);`. (8认同)
  • 与 std::vector&lt;&gt;::erase 相比,被删除元素分配的内存怎么样? (2认同)

Ada*_*eld 28

使用.erase()方法:

// Remove the first N elements, and shift everything else down by N indices
myvec.erase(myvec.begin(), myvec.begin() + N);
Run Code Online (Sandbox Code Playgroud)

这将需要复制索引N + 1到结尾的所有元素.如果你有一个大的向量并且经常这样做,那么使用一个std::deque代替,它有一个更有效的实现从前面删除元素.

  • 他还想压缩记忆. (2认同)

Jam*_*nze 10

v.erase( v.begin(), v.size() > N ?  v.begin() + N : v.end() );
Run Code Online (Sandbox Code Playgroud)

不要忘记检查尺寸,以防万一.