std::vector
から最初のN個の要素を削除するための信頼できる方法(メモリを圧縮する方法)を考えることができないようです。どうやってそれをやろうと思いますか?
メモリをコンパクトにしたいと述べたので、すべてを新しいベクトルにコピーし、スワップイディオムを使用するのが最善です。
std::vector<decltype(myvector)::value_type>(myvector.begin()+N, myvector.end()).swap(myvector);
.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
代わりに、前面から要素を削除するより効率的な実装があります。
v.erase( v.begin(), v.size() > N ? v.begin() + N : v.end() );
念のためサイズのチェックをお忘れなく。