我似乎无法想到一个可靠的方法(也压缩内存)从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)
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代替,它有一个更有效的实现从前面删除元素.
Jam*_*nze 10
v.erase( v.begin(), v.size() > N ? v.begin() + N : v.end() );
Run Code Online (Sandbox Code Playgroud)
不要忘记检查尺寸,以防万一.