2016-05-14 16 views
0

私はC++を使用して地雷探知機ゲームを作成していますが、ベクターのサイズ変更に問題があります。構造体の2Dベクトルのサイズを変更するには

は、ここで私が持っているものです。 intのベクトル:

vector<vector<int> > mineField; 

構造体のベクトル:

struct cell{ 
    int value;    //(-1 mine, 0 no surrounding, # > 0 number of surrounding mines) 
    int state;   //(0 hidden, 1 revealed, 2 marked) 
    bool isMine; 
}; 

vector<vector<cell> > mineField; 

セルのベクトルは掃海艇クラスの別の.cppファイルにあります。 。 私がしたいことは、セルのベクトルの大きさをintのベクトルと同じ次元にすることです。 とintのベクトルと構造体の値に構造体変数を初期化するには、 変数状態に0

これは私がこれまで試してみましたです:

this->mineField.resize(rowNum, vector<cell>(colNum)); 

    for(int i = 0; i < rowNum; i++){ 
     for(int j = 0; j < colNum; j++){ 

      this->mineField[i][j].state = 0; 

      this->mineField[i][j].value = mineField[i][j]; 
     } 
    } 

ときの試みこれを実行するには、5行×5列の寸法しか持てません(理由を理解できません)。 他のディメンションはプログラムを終了し、実行が失敗したことをnetbeansが通知します。

私も試してみました。このようにサイズを変更しようとすると

this->mineField.clear(); 
    for (int i = 0; i < rowNum; i++){ 

     this->mineField.push_back(vector<cell>(colNum, 0)); 

    } 

    for(int i = 0; i < rowNum; i++){ 
     for(int j = 0; j < colNum; j++){ 

      this->mineField[i][j].state = 0; 

      this->mineField[i][j].value = mineField[i][j]; 
     } 
    } 

、何も機能しません。

そして、このよう:

this->mineField.resize(rowNum); 

    for(int i = 0; i < rowNum; i++){ 

     this->mineField[i].resize(colNum); 

    } 

    for(int i = 0; i < rowNum; i++){ 
     for(int j = 0; j < colNum; j++){ 

      this->mineField[i][j].state = 0; 

      this->mineField[i][j].value = mineField[i][j]; 
     } 
    } 

が、これはプログラムの実行をすることができますが、任意の大きさの組み合わせでは動作しませんしようとしています。

ご協力いただきありがとうございます。

+2

だけで、他の1に等しいに新しい設定し、新しい1をループし、0に状態を変更しないのはなぜ? – NathanOliver

+1

1つはセルのベクトルで、もう1つはintであるため、それらをお互いに等しく設定することはできません –

答えて

1

私はあなたの質問を理解して、これは動作するはずです。ここで

vector<vector<cell > > mineField; 
vector< vector<int> > mineFeildInt; 

int size=mineFeildInt.size();//get the size of the vector for vector of integers 
minefield.resize(size);//resize the vector for vector of cells 

for(int i=0;i<size;i++) 
{ 
    int inner_size=mineFeildInt[i].size();//get the size of the vector of integers 
    minefield[i].resize(inner_size);//resize the vector of cells 
    for(int j=0;j<inner_size;j++) 
    { 
     minefield[i][j].state=0; 
     minefield[i][j].value=mineFeildInt[i][j];//assign the integer value from the vector of integer to the value member of the structure 
    } 
} 
1

は私のバージョンです:

struct cell { 
    int value; 
    int state; 
    int isMine; 
}; 

int main() 
{ 
    //declare source vector with sample data 
    vector<vector<int>> mineFeildSource = { {10, 20, 30, 40}, {50, 60, 70}, {80, 90, 100, 110} }; 

    //Evaluate your destination vector 
    vector<vector<cell>> mineField(mineFeildSource.size()); 
    for (vector<vector<int>>::size_type nSourRow = 0; 
     nSourRow < mineFeildSource.size(); nSourRow++) 
    { 
     auto &sourRow = mineFeildSource[nSourRow]; 
     auto &destRow = mineField[nSourRow]; 

     for (vector<int>::size_type nSourCol = 0; 
      nSourCol < sourRow.size(); nSourCol++) 
     { 
      destRow.push_back(cell{sourRow[nSourCol], 0, 0}); 
     } 
    } 

    return 0; 
} 
関連する問題