0

const value_type& valこの関数の意味を理解するのにいくつか問題があります。

void std::vector::resize (size_type n, const value_type& val);

C++ リファレンスを読んだところ、次のように書かれています。

n が現在のコンテナー サイズより大きい場合に、コンテンツが追加された要素にコピーされるオブジェクト。指定しない場合は、デフォルトのコンストラクターが代わりに使用されます。メンバー型 value_type は、コンテナー内の要素の型であり、最初のテンプレート パラメーター (T) のエイリアスとして vector で定義されます。

しかし、それは正確に何をしますか?たとえば、次のコード行があります。

myVector.resize(10, numeric_limits<double>::infinity());

myVector10 が現在のサイズよりも大きい場合、無限の内容がコピーされますか?

誰かが説明してくれれば、それは素晴らしいことです。

ありがとうございました!

4

3 に答える 3

4

ベクトル内のすべての値をその値に設定するため、myVector最初から が空の場合、値として無限大を持つ 10 個の double が含まれます。ベクトルに既に値 1.3、2.9、3.6、-1.9、5.2 がある場合、次の 5 つの要素は無限大になります。

明らかに、ベクトルがすでに 10 要素よりも大きい場合、そこに値があるかどうか、またはその値が何であるかに違いはありません。

于 2013-07-31T13:47:11.440 に答える
1

はい。このresize()関数を使用して、ベクトルのサイズを増減できます。ただし、サイズを増やすために使用する場合 (新しいサイズが現在のサイズよりも大きい場合)、それらの新しいセルに何かを入れる必要があります。2 番目のパラメーターを指定しない場合、この値は、ベクターが保持するデータ型の既定のコンストラクターになります。ただし、2 番目のパラメータを使用して、そのデフォルト値を指定できます。0これの一般的な用途は、NULL、 などの値を指定することです。

于 2013-07-31T13:48:37.067 に答える
0

精巧な言語にもかかわらず、それは非常に単純です。サイズ変更によって新しい要素が作成される場合は、もちろんそれらを何かで初期化する必要があります。通常、 の場合vector<T>、 のデフォルト コンストラクタを呼び出すことによって初期化されますT。その 2 番目の引数を指定すると、代わりに新しい要素がその値のコピーに初期化されます。

あなたの例では、実際、この呼び出しにより、ベクトルに 10 個のアイテムがあることが保証され、それよりも少ない場合は、すべての新しいアイテムが のコピーを受け取りますinfinity。したがって、ベクトルに 6 つの要素がある場合、 の 4 つの新しいコピーが取得されますinfinity

于 2013-07-31T13:48:15.583 に答える