![](/img/trans.png)
[英]Is using assign() a good way to initialise my C++ vector of structs?
[英]Good way to initialise a vector of vectors of struct (each with an initial value)?
我指的是我之前问的一个问题,我在哪里询问用空值初始化struct Vanish
向量的最佳方法:
使用assign()是初始化我的C ++结构向量的好方法吗?
我接受了答案:
BigClass::BigClass()
: tovanish(MAX_VANISH)
{
}
现在,我的问题是,如果要初始化struct Vanish
的向量的向量作为我的类( BigClass
)的成员,但是这次用值{3,3}初始化每个Vanish
。 我有:
std::vector<std::vector<Vanish>> vanish_vectors;
在我的构造函数中,我尝试过:
BigClass::BigClass():
vanish_vectors(NUM_COLUMNS, (NUM_ROWS, (3,3)))
{
}
旨在创建NUM_COLUMNS个向量,并且在每个向量中将有NUM_ROWS个结构Vanish
初始化为值{3,3}。
使用调试器,我发现它确实创建了NUM_COLUMNS个向量。 但是,每个向量都包含3个Vanish
结构,全为零。
用值初始化那些Vanish
结构的最佳方法是什么?
除非这是我不熟悉的语法,否则您实际上尝试使用的是逗号运算符 ,因此(NUM_COLUMNS, (NUM_ROWS, (3,3)))
变成(NUM_COLUMNS,3)
,将3作为传递值构造来自的向量(它将依次使用int调用向量的构造函数,为您提供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、3的结构以初始化其值。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.