因此,我的问题是:我想编写一个模拟人生的基本游戏。因此,我正在使用std :: vector保存当前状态并计算下一个状态。全部放到一会儿。我正在为每个值做std :: cout,格式化为矩阵。问题是,我只得到一个“矩阵”作为输出,而不是预期的倍数。
我还尝试在计算下一个状态(即nextCells = currentCells之前和之后)之后输出文本,该状态不起作用,而在计算for()循环中输出文本则起作用。
我不知道该怎么办了。感谢任何帮助!
我试图在计算出下一个状态(因此在nextCells = currentCells之前和之后)之后输出文本,但是在计算for()循环中输出文本时,这是行不通的。
#include <iostream>
#include <vector>
#include <unistd.h>
#define DIMX 10
#define DIMY 10
int countCells(std::vector<std::vector<int>> currentGrid, int x, int y);
int main() {
std::vector<std::vector<int>> currentCells(DIMX, std::vector<int>(DIMY));
std::vector<std::vector<int>> nextCells(DIMX, std::vector<int>(DIMY));
int count = 0;
nextCells = currentCells;
while(true) {
count++;
for(int i=0;i<=DIMX-1;i++) {
for(int j=0;j<=DIMY-1;j++) {
std::cout << currentCells[i][j];
std::cout.flush();
}
std::cout << "\n";
}
for(int i=0;i<=DIMX-1;i++) {
for(int j=0;j<=DIMY-1;j++) {
int aliveCells = countCells(currentCells, i, j);
if(currentCells[i][j]==0) {
if(aliveCells==3) {
nextCells[i][j]=1;
} else {
nextCells[i][j]=0;
}
} else {
if(aliveCells>3) {
nextCells[i][j]=0;
} else if(aliveCells<2) {
nextCells[i][j]=0;
} else {
nextCells[i][j]=1;
}
}
}
}
currentCells = nextCells;
if(count>=5) {
return 0;
}
}
}
int countCells(std::vector<std::vector<int>> currentGrid, int x, int y) {
int aliveCounter;
if(x==DIMX || x==0 || y==DIMY || y==0) {
return 0;
}
if(currentGrid[x-1][y-1]==1) {
aliveCounter++;
} else if(currentGrid[x-1][y]==1) {
aliveCounter++;
} else if(currentGrid[x-1][y+1]==1) {
aliveCounter++;
} else if(currentGrid[x][y-1]==1) {
aliveCounter++;
} else if(currentGrid[x][y+1]==1) {
aliveCounter++;
} else if(currentGrid[x+1][y-1]==1) {
aliveCounter++;
} else if(currentGrid[x+1][y]==1) {
aliveCounter++;
} else if(currentGrid[x+1][y+1]==1) {
aliveCounter++;
}
return aliveCounter;
}
答案 0 :(得分:0)
您的代码产生超出向量范围的异常,出于优化原因,该异常可能不会在发布模式下引发。 当countCells被调用时y = 9或x = 9
currentGrid[x+1][y+1]
超出范围。 注意
v = std::vector<int>(10,0) can be called from v[0] to v[9]; not v[10],
可能超出范围。