0

イベントのベクトルがあります。最初のイベントは、計算を簡単にするためのガードです。次のようにリセット操作を実装しました。

void reset()
{
    myVector.resize(1);
}

最初の 1 つの要素だけが残るようにします。この操作はメモリを再割り当てしますか? ループで呼び出すので、非常に時間効率が良いと思います。もしそうなら、効率的な代替手段は何でしょうか?

4

3 に答える 3

1

新しいサイズが現在のサイズより小さい場合、std::vector::resizeメモリを割り当てません。ベクトル内の残りの要素を単に破棄します。最悪の場合の複雑さは要素数に比例します。

于 2013-02-06T11:49:18.143 に答える
1

メモリを割り当てる唯一の関数はreserve、挿入 (insertおよびpush_back) です。そしてshrink_to_fitC++11で。

于 2013-02-06T11:39:16.820 に答える
1

この操作はメモリを再割り当てしますか?

ベクトルに要素がない場合は、最初の呼び出しresize(1);で割り当てが行われます。そうでなければ、いいえ。

効率的な代替手段は何ですか?

効率的な代替手段は、ベクターの構築中に十分なスペースをベクターに割り当てることです。次に、再割り当てが行われないことを確認します。

于 2013-02-06T11:44:31.240 に答える