C ++では、上にC配列を使用する理由はほとんどありませんstd::vector
。少なくともC++03では、これらのいくつかの説得力のある理由の1つは、初期化されていないオブジェクトの配列を割り当てるためにベクトルを使用することが不可能であるという事実でした。の「fill」コンストラクタstd::vector
は次のとおりです。
vector(size_type count, const T& value = T())
つまり...
int* array = new array[1000000];
以下よりもはるかに効率的である可能性があります。
std::vector<int> v(1000000);
...ベクトルコンストラクタは整数の配列をゼロで初期化する必要があるためです。したがって、PODのベクトルを操作する場合、malloc
;に相当するものはありません。あなたが得ることができる最高のものはと同等calloc
です。
C ++ 11は、「値の初期化」の概念でこれを変更したようです。C ++ 11では、デフォルトの引数なしでstd::vector
単一の値をとる新しいコンストラクターがあります。size_type
これにより、ベクトル内のすべての要素が「値初期化」されます。C ++ 11標準は、「値の初期化」と「ゼロの初期化」を区別します。
私の理解では、「値の初期化」は、でデフォルトのコンストラクターを呼び出すことと同じですT
。T
がのようなPODタイプの場合int
、デフォルトのコンストラクタは初期化されていない整数を作成するだけです。したがって、C ++ 11では、がPODである場合explicit vector::vector(size_type count)
と真に同等です。malloc
T
ただし、これについての私の理解は、最終的な標準ではなく、ドラフトC++11標準に基づいています。
質問:私の理解はここで正しいですか?がPODの場合explicit vector::vector(size_type count)
、初期化されていない配列(と同様)を提供しますか?malloc
T