c++中的二维向量问题

Posted

技术标签:

【中文标题】c++中的二维向量问题【英文标题】:2D vector issue in c++ 【发布时间】:2016-05-14 09:23:36 【问题描述】:

这是一个更大的基本扫雷程序的一部分。在这个程序的主 cpp 文件中,我将一个矩阵的所有值加载到一个 int 类型的二维向量中。基本上,这个矩阵用 1 和 0 填充,用于指示是否有地雷。我已经通过 cout 确认了原始向量和引用向量都在输出我加载到其中的矩阵。

我创建了一个结构单元格,其中包含 3 个可以处于的各种条件。我创建了一个单元格类型的 2d 向量,它基本上同时创建了 3 个向量。我在将引用向量的 1 和 0 值加载到 minesweeperBoard[i][j].isMine 时遇到问题。

这是我的代码:

include <iostream>
include <vector>

using namespace std;

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


void minesweeper(int row, int col, int numOfMines, vector<vector<int> >&mineField) 

rowNum = row;
colNum = col;
minesNum = numOfMines;

    int temp;

for (int i = 0; i < rowNum; i++) 
        for (int j = 0; j < colNum; j++) 
        temp=mineField[i][j];
            if (temp ==0) 
                minesweeperBoard[i][j].isMine = false;  //will set minesweeper to false if the condition is met
            
            else 
                minesweeperBoard[i][j].isMine = true;   //wil set minesweeper to true if the condition is met
            
        
    

程序正在编译,但一旦到达这一点就会引发错误。我做错了什么不是我应该如何将状态转移到 isMine 向量。

在我的主目录中,我打开文件并读取几条数据,行、列和地雷数量。然后该文件包含一个由我输入向量的行和列的巨大矩阵。然后我传递向量。请记住,原始的 void 函数实际上是一个类成员,因此 main 中的声明类似于它。我希望我不会让你们感到困惑。

 file >> rows >> columns >> mines;

//declare mine field vector of int
vector<vector<int> > mineField(rows, vector<int> (columns));


//Set's the elements of the .txt matrix to an array
for (int i = 0; i < rows; i++)
    for (int j = 0; j < columns; j++)
        file_difficulty >> mineField[i][j];
    


minesweeper:minesweeper play(columns, rows, mines, mineField);

刚刚意识到 minesweeperBoard 根本没有在构造函数或其他函数中声明。

【问题讨论】:

什么是minesweeperBoard,你在哪里声明/初始化它? 还有更多错误,无法编译此代码。请提供mcve 对不起,上面的代码只是项目的sn-p。 minesweeper 实际上是一个类,这是功能之一。 minesweeperBoard 是私有成员,被声明为 vector > minesweeperBoard; 我不想让它变得超级复杂,这就是为什么我遗漏了很多代码。 main 基本上询问用户他们想使用哪个扫雷文件,加载文件,从中读取它存储到向量中的实际板。我创建了一个扫雷类型的对象,并将行、列、地雷和地雷位置的向量发送到您在上面看到的代码中。 当我们无法重现错误时,情况会变得非常复杂。您不必发布原始代码,但您应该发布允许其他人重现错误的代码。 【参考方案1】:

让我猜猜:您在此声明中颠倒了rowscolumns 的顺序

minesweeper:minesweeper play(columns, rows, mines, mineField);

应该是

minesweeper:minesweeper play(rows, columns, mines, mineField);

【讨论】:

以上是关于c++中的二维向量问题的主要内容,如果未能解决你的问题,请参考以下文章

为啥我不能将整数向量推入 C++ 中的二维整数向量?

引用二维向量中的元素 (c++)

使用fstream将文件逐行读取到C++中的二维向量中[重复]

在 C++ 中填充二维向量

C++ 如何制作二维向量函数?

C++ 按列对二维向量进行排序