我指的是我之前问过的一个问题,我在那里询问使用空值初始化struct Vanish
向量的最佳方法:
Is using assign() a good way to initialise my C++ vector of structs?
我接受了答案:
BigClass::BigClass()
: tovanish(MAX_VANISH)
{
}
我现在的问题是,如果我想初始化struct Vanish
向量的向量,作为我的班级成员(BigClass
),但这次要初始化每个Vanish
价值{3,3}。我有:
std::vector<std::vector<Vanish>> vanish_vectors;
在我的构造函数中,我尝试过:
BigClass::BigClass():
vanish_vectors(NUM_COLUMNS, (NUM_ROWS, (3,3)))
{
}
旨在创建NUM_COLUMNS个向量,并且在每个向量中将结构Vanish
的NUM_ROWS初始化为值{3,3}。
使用调试器,我发现这确实创建了NUM_COLUMNS个向量。
但是,每个向量包含3个Vanish
结构,全部归零。
使用值初始化这些Vanish
结构的最佳方法是什么?
答案 0 :(得分:1)
除非这是我不熟悉的语法,否则您尝试的实际上是使用逗号运算符,因此(NUM_COLUMNS, (NUM_ROWS, (3,3)))
变为(NUM_COLUMNS,3)
,其传递3为构造向量的值(它将依次用向量调用向量的构造函数,给出3个默认初始化元素的向量)
我认为你需要做的是:
// C++11
vanish_vectors(NUM_COLUMNS, std::vector<Vanish>(NUM_ROWS, {3,3}))
// or for older C++ (you will also need to give Vanish a constructor)
vanish_vectors(NUM_COLUMNS, std::vector<Vanish>(NUM_ROWS, Vanish(3, 3)))
// or (as noted in the comments) to keep Vanish as POD in pre-C++11:
vanish_vectors(NUM_COLUMNS, std::vector<Vanish>(NUM_ROWS, makeVanish(3, 3)))
// with a function like this:
Vanish makeVanish( int a, int b ) {
Vanish thing;
thing.a = a;
thing.b = b;
return thing;
}
发送一个向量来初始化值,并且该向量包含一个值为3的结构,以初始化其值。