7

これは単純に見えますが、私は混乱しています。たとえば、intsが100のベクトルを作成する方法は次のとおりです。

std::vector<int>  *pVect = new std::vector<int>(100);

ただし、std :: vectorのドキュメントを見ると、そのコンストラクターは次の形式であることがわかります。

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

では、前のものはどのように機能しますか?newデフォルトのコンストラクターから取得した初期化値を使用してコンストラクターを呼び出しますか?もしそうなら、

std::vector<int, my_allocator> *pVect = new std::vector<int>(100, my_allocator);

私は自分のアロケータを渡すところ、また働きますか?

4

3 に答える 3

14

あなたはそれをすべて間違っています。必要なのが現在のスコープと時間のベクトルだけである場合は、自動オブジェクトとして作成するだけです。

std::vector<int> pVect(100);

コンストラクターには、2番目と3番目のパラメーターのデフォルトの引数があります。したがって、intだけで呼び出すことができます。独自のアロケータを渡したい場合は、スキップできないため、2番目の引数を渡す必要があります。

std::vector<int, myalloc> pVect(100, 0, myalloc(some_params));

専用の例で問題が明確になる場合があります

void f(int age, int height = 180, int weight = 85);

int main() { 
  f(25); // age = 25, height and weight taken from defaults.
  f(25, 90); // age=25, height = 90 (oops!). Won't pass a weight!
  f(25, 180, 90); // the desired call.
}
于 2010-03-13T16:01:44.907 に答える
5

(おそらく)明確にするために:

100要素のvと呼ばれるベクトルオブジェクトを作成するには:

std::vector <int> v( 100 );

これは、最初のパラメーターとしてサイズ(100)をとるベクトルコンストラクターを使用します。100要素の動的に割り当てられたベクトルを作成するには:

std::vector <int> * p = new std::vector<int>( 100 );

これはまったく同じコンストラクターを使用します。

于 2010-03-13T16:01:16.327 に答える
0

あなたはvector百の要素を作成しています。投稿した2番目のコードサンプルでわかるように、次のようになります。

明示的なベクトル(size_type n、const T&value = T()、const Allocator&= Allocator());

このコンストラクターは、入力する要素の量と、ベクトル時間に挿入される要素をvector受け取りvalueますn。指定しない場合、valueavalueはベクタータイプのデフォルトコンストラクターを使用して作成されますTintここでは、それを0に初期化する「デフォルト」コンストラクターになります(のデフォルトコンストラクターなどはありませんがint、C ++標準ではint、このような場合は0に初期化されるとされています)。

于 2010-03-13T16:05:07.037 に答える