5

実行時に、のサイズを決定できvectorますか?

例えば

input : 25 // ベクトルのサイズを示す

  code :
        int N ;
        cin << N ;
        vector <int> data[N];
4

4 に答える 4

13

興味があるかもしれない 2 つの方法:

スニペットの例

  std::vector<int> v;

  for (int i =0; i < 25; ++i)
    v.push_back (i);

  v.reserve (100); 

  std::cerr << "Elements: " << v.size     () << std::endl;
  std::cerr << "Capacity: " << v.capacity () << std::endl;

出力

Elements: 25
Capacity: 100

元の投稿のサンプル スニペットには少なくとも 1 つのタイプミスが含まれていると思います。以下のようにstd::vector<int>withN要素を宣言していません。

あなたが書いたのは、 data がvector<int>sizeの配列でありN、コンパイル時に N がわかっている場合 (またはコンパイラに可変長配列拡張が存在する場合) にコンパイルされるということです。

vector<int> data[N];

を作成して最初から要素をvector挿入するには:N

std::vector<int> data (N);
于 2011-12-17T12:06:44.063 に答える
9

あなたはvector(おそらく)間違った方法で使用しています...その方法では、NベクトルのCスタイルの配列を定義しています(ちなみに、コンパイル時にNを知る必要があるため、その構文は標準ではありません)。おそらくvector包含N要素を定義したいでしょう。これは次のように行われます:

vector<int> data(N);

vector(これは、デフォルトで初期化された配列N要素 longを構築するの 1 パラメータ コンストラクタを呼び出します)

実行時にそのサイズを取得するには1、そのメソッドを呼び出すだけですsize():

cout<<"The vector contains "<<data.size()<<" elements.\n"

  1. vectorのサイズ (そこに格納されている要素の数として意図されている) は実行時にのみ定義されるため、実際にはコンパイル時にそのサイズを尋ねることさえ意味がありません。
于 2011-12-17T12:05:49.697 に答える