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

时间:2011-09-08 17:10:23

标签: c++ stdvector

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

3 个答案:

答案 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() );

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