2017-10-18 8 views
-1

をクラッシュさ:は、私のコードはバグがあるので、私は、プログラミングベクトルに新たなんだ私のプログラム

#include <fstream> 
#include <iostream> 
#include <sstream> 
#include <string> 
#include <vector> 
int main() 
{ 
    std::ifstream in("input.txt"); 
    std::vector<std::vector<int> > v, w; 

    if (in) { 
     std::string line; 

     while (std::getline(in, line)) { 
      v.push_back(std::vector<int>()); 

      for(int x=0; x<line.size(); x++){ 
       v.back().push_back((int)line[x] - (int)'0'); 
      } 
     } 
    } 

    for (int i = 0; i < v.size(); i++) { 
     for (int j = 0; j < v[i].size(); j++) 
      std::cout << v[i][j] << ' '; 

     std::cout << '\n'; 
    } 

    int size = v.size(); //because its a square matrix 
    w = v; //w is our temp vector for storing new values; 
    int alive =0; 
    int z=0; 
    for (int i=0;i<size;i++) 
    { 
     for (int j=0;j<size; j++) 
     { 
      alive = 0; 
      for(int c = -1;c<2; c++) 
      { 
       for(int d = -1; d<2 ; d++) 
       { 
        if(!(c==0 && d == 0)) 
        { 
         z = v[i+c][j+d]; 
         if(z) 
          ++alive; 
        } 
       } 

       if(alive<2) w[i].push_back(0); 
       else if(alive == 3) w[i].push_back(1); 
       else w[i].push_back(0); 
      } 
     } 
    } 
    return 0; 
} 

私は私の第二の可変間違っに値を代入していますね。私のプログラムは、線に沿って入力ファイルから読み込み:

1010101 
0101010 
1010101 

とその隣人(生活の問題のゲーム)を分析した後、第2のベクトルwに書き込むことです、私は私がw.push_back()を使うべきだと思うが、私はよく分かりません2Dベクトルの構文について解説します。変数をプッシュする良い方法はありますか?

+0

'Z = V [J + D] [私はCを+];' - 'Z = v.at(私にそれを変更します+ c).at(j + d); ' - スローされている' std :: out_of_range'例外を診断します。 – PaulMcKenzie

答えて

0

すぐに気づく問題は2つあります。あなたのクラッシュを引き起こしている主なものは、v配列の範囲外にアクセスしていることです。これは、iが0でcが-1の場合に発生し、isize-1で、cが+1の場合にも発生します(同じことがjdで発生します)。

他の問題は、あなたがwalive値を保存する方法です。 w = vで始まるので、必要な要素がすべてあります。たとえば、w[i][j] = 0などと置き換えるだけです。 (。あなたはまた、cループの外でその条件ブロックを移動したいと思う)

関連する問題