11

ベクトルを呼び出すclear()と、ベクトルに格納されているもののデストラクタが呼び出されます。これは線形時間操作です。しかし、これはベクトルにまたはのようなプリミティブ型が含まれている場合に当てはまりますintdouble?

4

4 に答える 4

5

答えは実装に依存すると思います。かかる時間はせいぜい線形時間ですが、一部の実装ではこれを最適化することを選択する場合があります。

Per 'ベクトルをクリアするとその容量に影響しますか? .clear'が呼び出された場合でも、MSVC も G++ もベクターの容量を減少させません。.clearG++ ヘッダーを見ると、要素がスカラー (プリミティブ算術型またはポインター) である限り、既定のアロケーターで一定時間であることが明らかです。

于 2013-02-20T00:58:03.633 に答える
0

まあ.. clear() は線形であると言われていますが、すべてのアイテムのデストラクタを呼び出すこともわかっています...

http://www.cplusplus.com/reference/vector/vector/clear/

デストラクタの呼び出しが線形でない場合はどうなりますか?

ただし、プリミティブでは、デストラクタ呼び出しは線形です (または定数です。これは線形以上でない限り重要ではありません)。

はい、プリミティブでは clear() は常に線形操作です

于 2013-02-20T00:59:18.360 に答える
0

このリンクでは:

http://www.cplusplus.com/reference/vector/vector/clear/

の複雑さはclear()サイズが線形であると言います(破壊)。

于 2013-02-20T00:52:05.810 に答える