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

时间:2013-06-08 21:49:29

标签: c++ stdvector

我指的是我之前问过的一个问题,我在那里询问使用空值初始化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结构的最佳方法是什么?

1 个答案:

答案 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的结构,以初始化值。