2016-09-05 2 views
0

私はベクトルの初心者です。私はこの2Dベクトルをmain()関数に入力しようとしていますが、そうすることはできません。main()内の2Dベクトルを入力します。

int main() 
{ 
    int t, x, n; 
     cin>>n; 
     vector< vector <int> > jail(n); 
     for(int i=0; i<n; i++){ 
      jail[i].reserve(n); 
      for(int j=0; j<n; j++){ 
       cin>>jail[i][j]; 
      } 
     } 

     cout<< jailBreak(jail,n-1,0,0)<<endl; 
} 

実行時エラーは、プログラムの先頭にガベージ入力を入力する必要があることです。 このあいまいな入力は私に長時間迷惑をかけていました。

+0

私は私のマシンでプログラムをテストし、それがhttp://ideone.com/KI9f2i – PRP

+2

ではなく 'reserve'の' resize'を使用し正常に動作します。 – Shravan40

答えて

1

for(int i=0; i<n; i++){ 
     jail[i].reserve(n); 
     for(int j=0; j<n; j++){ 
      cin>>jail[i][j]; 
     } 
    } 

jail[i].reserve(n); 

は、その前に仕事を見たことがないjail[i].resize(n)

cin>>jail[i][j] 

でなければなりません。 cinを一時的に押し込んでから押します。

int temp; 
std::cin >> temp; 
jail[i].emplace_back(temp); 
+2

'cin >> jail [i] [j]'は 'resize'が呼ばれていれば完璧です。一時的なものは時間の無駄です。 –

5

このライン:

jail[i].reserve(n); 

だけで(それがpush_back事業にさらにreallocsを最適化するだけのヒントですが、割り当てを保証するものではありません)事前に割り当てるメモリにvectorを伝えます。実際にメモリを割り当てる代わりにresizeを使用する必要があります。あなたのコードで

+0

'reserve'は実際に割り当てを保証しており、単なるヒントではありません。 'resize'は割り当てられたメモリにオブジェクトを作成します。 –

+0

あなたはそれが割り当てられますが、コンストラクタを呼び出すオブジェクトを構築しないことを意味しますか?その場合、int型の違いはありませんか? –

関連する問題