web-dev-qa-db-ja.com

std :: vectorから最初のN個の要素を削除する

std::vectorから最初のN個の要素を削除するための信頼できる方法(メモリを圧縮する方法)を考えることができないようです。どうやってそれをやろうと思いますか?

25
ForeverLearning

メモリをコンパクトにしたいと述べたので、すべてを新しいベクトルにコピーし、スワップイディオムを使用するのが最善です。

std::vector<decltype(myvector)::value_type>(myvector.begin()+N, myvector.end()).swap(myvector);
37
Mark Ransom

.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代わりに、前面から要素を削除するより効率的な実装があります。

29
Adam Rosenfield
v.erase( v.begin(), v.size() > N ?  v.begin() + N : v.end() );

念のためサイズのチェックをお忘れなく。

10
James Kanze