用随机值C ++填充我的数组

时间:2015-07-12 00:06:28

标签: c++ arrays vector

我试图制作一款简单的战舰游戏。我一直试图随机将船放在我的板上。我有一种感觉,因为我应该使用矢量而不是数组。但我不确定如何创建一个二维矢量。

这是我到目前为止所拥有的:

using namespace std;



void clearBoard(const int row, const int col) 
{
    int grid[row][col];
    for (int i = 0; i < row; i++) {
        for (int j = 0; j < col;j++) {
            grid[i][j] = 0;
            cout << grid[i][j] << " ";

        }
        cout << endl;
    }
}

void setShips(int max_ships1, int row, int col)
{
    int ship_counter = 0;
    while(ship_counter < max_ships1) {
        int x = rand() % row;
        int y = rand() % col;
        int matrix[x][y]
        if (matrix[x][y] != 1) {
            ship_counter++;
            matrix[x][y] = 1;
            cout << matrix[x][y] << " ";
        }
    cout << endl;
    }
}

int main(int argc, char* argv[])
{

    int _row = atoi(argv[0]);
    int _col = atoi(argv[2]);

    int max_ships;
    if (_row > _col) {
        max_ships = _row;
    }
    else if (_col > _row) {
        max_ships = _col;
    }
    else {
        max_ships = _row;
    }

    cout << "enter the size of the board:";
    cin >> _row >> _col;
    clearBoard(_row, _col);
    setShips(_row,_col,max_ships);





    return 0;

}

如果用户决定使用3x3板,则第一个函数返回:

0 0 0
0 0 0
0 0 0

我希望随机生成1代表战列舰的位置。 以下是3x3电路板的示例:

1 0 0
0 1 0
1 0 0

感谢。

2 个答案:

答案 0 :(得分:1)

您的主要问题是$(window).trigger('resize');grid返回时超出范围(并且被有效删除),而clearBoard(与matrix完全无关的数组)会消失每次通过grid循环超出范围。这意味着你用零填充while,然后用随机数据创建一堆其他数组,有时将一个元素设置为1.你需要使grid全局,或者返回它来自grid并将其作为参数传递给clearBoard

传递多维原始数组有点复杂,因此如果您不想使数组全局化,使用向量可能会使您更容易。要创建二维向量,您可能会认为setShips会起作用,但这不太对。您可以这样做,如评论中所述,但从技术上讲,std::vector<std::vector<int>>是所谓的锯齿状数组,这意味着您可以每行的长度不同 - 与原始2D数组不同,您知道每行必须始终具有相同的长度。

使用std::vector<std::vector<int>>制作二维数组的正确方法是:

vector

正如您所看到的,通过其(x,y)坐标获取元素有点复杂。您使用的两种计算方法中的哪一种并不重要,但在一个版本std::vector<int> grid(row * col); grid[i * row + j] = 1; // Or i * col + j will also work. ixj,而在另一个版本中,反之亦然(yi等)。

答案 1 :(得分:0)

您还可以设置这样的2D矢量:

#include<vector>
#include<iostream>
using namespace std;

int main()
{

    std::vector< std::vector<int> > grid2D;

    //m * n is the size of the grid

    int m = 10;
    int n = 10;

    //Grow rows by m
    grid2D.resize(m);

   //Grow Columns by n
    for(int i = 0 ; i < m ; ++i) grid2D[i].resize(n);

  // print out 2D grid on screen
    for(i = 0 ; i < m ; ++i){
        for(int j = 0 ; j < n ; ++j){       

            grid2D[i][j]=0;
            cout<<""<<grid2D[i][j]<<" ";

        }
        cout<<"\n";

    }
    cout<<"\n";
    return 0;
}