イベントのベクトルがあります。最初のイベントは、計算を簡単にするためのガードです。次のようにリセット操作を実装しました。
void reset()
{
myVector.resize(1);
}
最初の 1 つの要素だけが残るようにします。この操作はメモリを再割り当てしますか? ループで呼び出すので、非常に時間効率が良いと思います。もしそうなら、効率的な代替手段は何でしょうか?
イベントのベクトルがあります。最初のイベントは、計算を簡単にするためのガードです。次のようにリセット操作を実装しました。
void reset()
{
myVector.resize(1);
}
最初の 1 つの要素だけが残るようにします。この操作はメモリを再割り当てしますか? ループで呼び出すので、非常に時間効率が良いと思います。もしそうなら、効率的な代替手段は何でしょうか?
新しいサイズが現在のサイズより小さい場合、std::vector::resize
メモリを割り当てません。ベクトル内の残りの要素を単に破棄します。最悪の場合の複雑さは要素数に比例します。
メモリを割り当てる唯一の関数はreserve
、挿入 (insert
およびpush_back
) です。そしてshrink_to_fit
C++11で。
この操作はメモリを再割り当てしますか?
ベクトルに要素がない場合は、最初の呼び出しresize(1);
で割り当てが行われます。そうでなければ、いいえ。
効率的な代替手段は何ですか?
効率的な代替手段は、ベクターの構築中に十分なスペースをベクターに割り当てることです。次に、再割り当てが行われないことを確認します。