【发布时间】:2016-05-14 16:35:09
【问题描述】:
我正在使用 C++ 制作扫雷游戏,但在调整矢量大小时遇到问题。
这是我所拥有的: 整数向量:
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 文件中。 我想要做的是重新调整单元格向量的大小,使其具有与整数向量相同的维度。 并将结构变量 value 初始化为整数向量和结构中的值 变量状态为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 行 x 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];
}
}
尝试这样做可以让程序运行,但不适用于任何尺寸组合。
非常感谢任何帮助,谢谢。
【问题讨论】:
-
为什么不将新的设置为等于另一个,然后循环通过新的并将状态更改为0?
-
它不会让我将它们设置为彼此相等,因为一个是单元格向量,另一个是 int