我正在尝试做类似的事情:
#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;
}
}
}
然而,显然我不能用这种方式初始化矢量的“板”矢量。
如何创建二维矢量类型的公共成员并正确初始化它?
答案 0 :(得分:11)
你应该使用允许你指定两个向量的大小和初始值的构造函数,这可能会使它更容易一些。
类似的东西:
vector<vector<int>> v2DVector(3, vector<int>(2,0));
应该有效。
答案 1 :(得分:5)
使用矩阵代替:
(增强文档的基本示例)
#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;
}
答案 2 :(得分:3)
使用g ++编译代码,我得到的错误是srand()
和rand()
都没有声明。我必须为要编译的代码添加#include <cstdlib>
。但是,一旦我这样做,它工作得很好。所以,我要说除了添加include语句之外,你的代码还可以。你正确地初始化了矢量。
也许您的代码与您发布的内容不完全匹配?我假设如果你的实际代码不包含cstdlib,那么你很快就会明白这是问题而不是带向量的东西。因此,如果您的代码与您发布的代码不完全匹配,那么这可能就是问题所在。如果没有,你使用什么编译器?