私は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];
}
}
が、これはプログラムの実行をすることができますが、任意の大きさの組み合わせでは動作しませんしようとしています。
ご協力いただきありがとうございます。
だけで、他の1に等しいに新しい設定し、新しい1をループし、0に状態を変更しないのはなぜ? – NathanOliver
1つはセルのベクトルで、もう1つはintであるため、それらをお互いに等しく設定することはできません –