如何使用逐引用传递二维矢量

How to pass a 2d vector using pass-by-reference?

本文关键字:二维 何使用 引用      更新时间:2023-10-16

此代码是一个较大项目的一部分。我试图理解如何通过使用引用将二维向量传递给另一个函数。这是我当前的代码,我无法弄清楚错误是什么(使用Xcode)。

代码:

int main()
{
   int mines, col, row;
   int test;
   cout << "nHow many many rows of boxes?" <<endl; //getting row, 
   //column and mines from user
   cin >> row;
   cout << "nHow many many columns of boxes?" <<endl;
   cin >> col;
   cout << "nHow many many mines are in the board?" <<endl;
   cin >> mines;
   test=(row*col)-1;        // test to make sure that the whole gameboard is not filled with mines (multiplies row and columns and subtracts by 1)
   while (!(test>= mines))  // if there are more mines than cells or if the whole board is filled with mines, will ask for mines again
   {
      cout << "nHow many many mines are in the board?" <<endl;
      cin >> mines;
   }
   vector <vector<int> > grid(col, vector<int>(row));   //create 2d vector with col and row as parameters
   minesweeper(row, col, mines, vector< vector<int> > grid(col, vector<int>(row)))  //sends all data to minesweeper();


   return 0;
}
void minesweeper(int row,
                 int col,
                 int numOfMines,
                 vector<vector<int>>& mineField)
{
}

编辑:

对不起,我把问题搞砸了。那是深夜,我忘了复印信头和声明。

这是一个混乱的C++语法。在对minesweeper的调用中,您试图声明并初始化一个名为grid的变量。什么您已经有一个名为grid的变量。只需获得一本C++教科书,然后键入grid而不是vector< vector<int> > grid(col, vector<int>(row)),就可以获得

vector <vector<int> > grid(col, vector<int>(row));  //create 2d vector with col and row as parameters
minesweeper(row, col, mines,  grid);

在那之后,它将通过引用传递,因为您已经专门声明了参数以使其通过引用传递。你看到mineField参数与其他参数有什么不同吗?这些参数会使它被特别标记为通过引用?

并考虑将描述行数的变量命名为CCD_ 3而不是CCD_。

我看到的问题:

  1. 在调用函数minesweeper之前,您尚未声明该函数。请在main之前添加声明。

    void minesweeper(int row,
                     int col,
                     int numOfMines,
                     vector<vector<int>>& mineField);
    
  2. 您没有使用正确的语法来调用函数。用途:

    minesweeper(row, col, mines, grid)  //sends all data to minesweeper();
    

    您已经在该行之前声明了grid。之后你可以使用它。不需要在对minesweeper的调用中添加用于声明grid的代码。