非常に大きな可能性のある数のベクトルを繰り返し処理し、偶数要素と奇数要素を新しい別のベクトルにコピーする必要があるとしましょう。(ソース ベクトルは、奇数に対する偶数の比率を持つことができます。すべてが偶数、すべてが奇数、またはその中間である可能性があります。)
簡単にするために、push_back
は次のような場合によく使用されます。
for (std::size_t Index; Index < Source.size(); Index++)
{
if (Source[Index] % 2) Odds.push_back(Source[Index]);
else Evens.push_back(Source[Index]);
}
ただし、パフォーマンスが最優先される並べ替えアルゴリズムなどの実装の一部として使用すると、これが非効率的で有害になるのではないかと心配しています。たとえば、QuickSort では、このように要素を分離します。
事前にメモリを割り当てるために使用できるreserve()
ため、必要な割り当ては 1 つだけですが、ソース ベクター全体を 2 回反復する必要があります。
もちろん、ソース ベクトルのサイズと同じ量のスペースを割り当てることもできます。これは、新しいベクトルがそれ以上保持する必要がないためです。
私が見逃しているより良い方法はありますか?push_back()
プログラマーにとってこの種のことを管理することは通常信頼されていますか、それとも機密性の高いアルゴリズムにとって負担になる可能性がありますか?