0

vector<myClass> v(10); 各要素のデフォルト値のようなベクトルを作成した場合はどうなりますか?


また、それがvector<myUnion> v(10)

4

3 に答える 3

15

std::vector<>ベクトルを次のように宣言するときに使用しているコンストラクター

vector<myClass> v(10);

実際には複数のパラメータがあります。これには、初期サイズ(10として指定)、新しい要素の初期値、およびアロケーター値の3つのパラメーターがあります。

explicit vector(size_type n, const T& value = T(),
                const Allocator& = Allocator());

2番目と3番目のパラメーターにはデフォルトの引数があるため、宣言でそれらを省略できました。

新しい要素のデフォルトの引数値は、デフォルトで構成された値であり、この場合はMyClass()です。この値は、コピーコンストラクターを使用して10個の新しい要素すべてにコピーされます。

正確なMyClass()意味はクラスによって異なります。あなただけがそれを知っています。

PS標準ライブラリの実装では、上記のインターフェイスを実装するときに、デフォルトの引数の代わりに関数のオーバーロードを使用できます。一部の実装が関数のオーバーロードを使用することを決定した場合、で単一のパラメーター(サイズ)のみを使用してコンストラクターを宣言する場合があります。ただし、これは最終結果には影響しません。すべてのベクトル要素は、値が初期化されたかのように動作を開始する必要があります。std::vector

于 2009-11-24T05:05:35.140 に答える
1
vector<myClass> v;

サイズと容量が0の空のベクトル。

于 2009-11-24T04:50:37.293 に答える
1

2番目の質問に対する答えも同様です。デフォルトのコンストラクターで初期化されたvector<myUnion> v(10)10の配列を作成します。myUnionただし、次の点に注意してください。1)コンパイラはコンストラクタ、コピー、または破棄するメンバーを認識しないため、ユニオンはコンストラクタ、コピーコンストラクタ、またはデストラクタを持つメンバーを持つことはできません。2)クラスや構造体と同様に、組み込みのメンバーもあります。 intなどのタイプは、デフォルトに従って初期化されます。つまり、まったく初期化されません。それらの値は未定義になります。

于 2009-11-24T16:28:17.733 に答える