C++ 初始化struct向量向量的好方法(每个向量都有一个初始值)?

C++ 初始化struct向量向量的好方法(每个向量都有一个初始值)?,c++,stdvector,C++,Stdvector,我提到了我之前问过的一个问题,我问的是用空值初始化struct invision向量的最佳方法: 我接受了答案: BigClass::BigClass() : tovanish(MAX_VANISH) { } 我现在的问题是,如果我想初始化struct invision的向量向量,作为我的类(BigClass)的一个成员,但这次用值{3,3}初始化每个invision,该怎么办。我有: std::vector<std::vector<Vanish>> vanish_

我提到了我之前问过的一个问题,我问的是用空值初始化
struct invision
向量的最佳方法:

我接受了答案:

BigClass::BigClass()
: tovanish(MAX_VANISH)
{

}
我现在的问题是,如果我想初始化
struct invision
的向量向量,作为我的类(
BigClass
)的一个成员,但这次用值{3,3}初始化每个
invision
,该怎么办。我有:

std::vector<std::vector<Vanish>> vanish_vectors;
为了创建NUM_列向量,在每个向量中,struct
invision
的NUM_行初始化为值{3,3}

使用调试器,我发现这确实创建了NUM_列向量。 然而,这些向量中的每一个都包含3个
invision
structs,全部为零


用值初始化那些
消失
结构的最佳方法是什么?

除非这是我不熟悉的语法,否则您尝试的实际上是使用逗号运算符,因此
(NUM\u COLUMNS,(NUM\u ROWS,(3,3))
变为
(NUM\u 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;
}
/C++11
消失向量(NUM列,std::vector(NUM行,{3,3}))
//或用于旧C++(您还需要给构造器消隐)
消失向量(NUM_列,std::vector(NUM_行,消失(3,3)))
//或者(如注释中所述)在C++11之前的版本中保持消失为POD:
消失向量(NUM_列,std::vector(NUM_行,makeVanish(3,3)))
//具有如下功能:
消失使消失(inta,intb){
消失事物;
事物a=a;
事物b=b;
归还物;
}

它发送一个向量来初始化其值,该向量包含一个值为3、3的结构来初始化其值。

我的编译器不接受
3、3
中的大括号。这可能意味着您使用的是C++11之前的编译器,或者您尚未启用C++11扩展。您应该给您的结构一个构造函数并调用它。我会在答案中添加注释。@BeeBand或者,编写一个
Vanish makeVanish(int,int);
函数,它为您构造对象。也就是说,如果您希望您的结构是一个POD。否则,请使用构造函数。@juan Ok,它看起来像:
Vanish*v=new Vanish;v->firstfield=val;v->secondfield=val;return v;
?@BeeBand nooo!没有指针,没有
new
。只要“Vanish”(NUM_列,std::vector(NUM_行,makeVanish(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;
}