我似乎无法想出一种可靠的方法(也可以压缩内存)从std::vector
中删除前N个元素。怎么会这样做呢?
答案 0 :(得分:35)
由于您提到要压缩内存,最好将所有内容复制到新的向量并使用交换习惯用法。
std::vector<decltype(myvector)::value_type>(myvector.begin()+N, myvector.end()).swap(myvector);
答案 1 :(得分:28)
使用.erase()
方法:
// Remove the first N elements, and shift everything else down by N indices
myvec.erase(myvec.begin(), myvec.begin() + N);
这将需要复制索引N + 1到结尾的所有元素。如果您有一个大型向量并且经常这样做,那么请改用std::deque
,这样可以更有效地从前面删除元素。
答案 2 :(得分:10)
v.erase( v.begin(), v.size() > N ? v.begin() + N : v.end() );
不要忘记检查尺寸,以防万一。