2012-03-26 17 views
-1

以下のコードでは、ベクトルイテレータを逆算できませんが、その理由はわかりません。私は単純に2次元配列を反復し、すべての値を0にインスタンス化しています。どこで無効な位置に反復処理していますか?ベクトル反復子が逆参照できないのはなぜですか?

vector<vector<bool>> isduplicate(100); 

     for(int i=0;i<isduplicate.size();i++){ 
      for(int s=0;s<isduplicate.size();s++) 
      isduplicate[i][s]=false; 
     } 
+6

Uhh ...イテレータはどこですか? – MGZero

+1

コードはコンパイルされますが、クラッシュします。内側の 'for'文の前に外側の' for'文の次の行を入れてみましょう: 'isduplicate [i] .resize(100);'これは100x100配列なのでクラッシュしません内部 'for'ステートメントで)、somethingx100配列ではありません。 2番目の次元に異なるサイズが必要な場合は、 'resize'呼び出しでそれを指定し、内側の' for'文を 's chris

+3

@chris: 'reserve 'ではなく' resize'でなければなりません。 'reserve'は、新しいメモリー割り当てなしで要求されたサイズまで' push_back 'することができますが、 '[]'演算子を介して直接要素にアクセスするには、' resize'を呼び出さなければなりません。 –

答えて

4

isduplicateを2回繰り返します。 、

vector<vector<bool>> isduplicate(100); 
for(int i=0;i<isduplicate.size();i++){ 
    for(int s=0;s<isduplicate[i].size();s++) 
     isduplicate[i][s]=false; 
} 

しかし、isduplicate[i]はすべてiに対して空であるので、あなたは、内側のループで何かを反復処理しません:あなたは、内側のループでisduplicate[i]を反復処理する必要があります。

何がしたいことは、その後、false値を含む100 bool秒の100のベクトルを持つことがある場合:

vector<vector<bool>> isduplicate(100, vector<bool>(100, false)); 

それを行う必要があります。

関連する問題