代码仅一次输出std :: vector而不是多次输出

时间:2019-04-27 18:42:54

标签: c++

因此,我的问题是:我想编写一个模拟人生的基本游戏。因此,我正在使用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;
}

1 个答案:

答案 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],

可能超出范围。