0

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

使用 assign() 是初始化我的 C++ 结构向量的好方法吗?

我接受了答案:

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 个向量,并且在每个向量中将 NUM_ROWS 的结构Vanish初始化为值 {3, 3}。

使用调试器,我发现这确实创建了 NUM_COLUMNS 个向量。但是,这些向量中的每一个都包含 3 个Vanish结构,全部归零。

Vanish用值初始化这些结构的最佳方法是什么?

4

1 回答 1

1

除非这是我不熟悉的语法,否则您尝试的实际上是使用逗号运算符,因此(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 的结构来初始化值。

于 2013-06-08T21:54:13.773 回答