如何在C++中声明和初始化2d int向量?

Fra*_*ank 5 c++

我正在尝试做类似的事情:

#include <iostream>
#include <vector>
#include <ctime>

class Clickomania
{
    public:
        Clickomania();
        std::vector<std::vector<int> > board;
};

Clickomania::Clickomania()
    : board(12, std::vector<int>(8,0))             <<<<<<<
{

    srand((unsigned)time(0));

    for(int i = 0; i < 12; i++)
    {
        for(int j = 0; j < 8; j++)
        {
            int color = (rand() % 6) + 1;
            board[i][j] = color;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

但是,显然我不能用这种方式初始化矢量的"板"矢量.

如何创建二维矢量类型的公共成员并正确初始化它?

san*_*alp 11

你应该使用允许你指定两个向量的大小和初始值的构造函数,这可能会使它更容易一些.

就像是:

vector<vector<int>> v2DVector(3, vector<int>(2,0));
Run Code Online (Sandbox Code Playgroud)

应该管用.

  • 这正是OP所做的. (5认同)

Edd*_*onk 5

改为使用矩阵:

(来自boost文档的基本示例)

#include <boost/numeric/ublas/matrix.hpp>
#include <boost/numeric/ublas/io.hpp>

int main () {
    using namespace boost::numeric::ublas;
    matrix<double> m (3, 3);
    for (unsigned i = 0; i < m.size1 (); ++ i)
        for (unsigned j = 0; j < m.size2 (); ++ j)
            m (i, j) = 3 * i + j;
    std::cout << m << std::endl;
}
Run Code Online (Sandbox Code Playgroud)

  • 也许是因为它与让矢量在上面的代码中工作无关,就像问题一样.我不知道.我认为低估它有点苛刻 - 这个答案*毕竟可能是有帮助的 - 但它在技术上并没有回答这个问题. (3认同)
  • +1,我发现即使它没有完全回答OP的问题,也没有必要投票给一个有用的答案. (3认同)

Jon*_*vis 3

使用 g++ 编译代码,我得到的错误是既没有声明srand()也没有rand()声明。我必须添加#include <cstdlib>代码才能编译。但一旦我这样做了,效果就很好。所以,我想说,除了添加 include 语句之外,您的代码很好。您正在正确初始化向量。

也许您拥有的代码与您发布的代码不太匹配?我假设如果您的实际代码不包含 cstdlib,那么您很快就会明白这是问题所在,而不是向量的问题。因此,如果您的代码与您发布的代码不太匹配,也许这就是问题所在。如果不是,你使用什么编译器?