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

Posted

技术标签:

【中文标题】初始化结构向量向量的好方法(每个都有一个初始值)?【英文标题】:Good way to initialise a vector of vectors of struct (each with an initial value)? 【发布时间】:2013-06-08 21:49:28 【问题描述】:

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

Is using assign() a good way to initialise my C++ vector of structs?

我接受了答案:

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 的 struct Vanish 初始化为值 3, 3。

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

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

【问题讨论】:

【参考方案1】:

除非这是我不熟悉的语法,否则您尝试的实际上是使用逗号运算符,因此(NUM_COLUMNS, (NUM_ROWS, (3,3))) 变为(NUM_COLUMNS,3),它传递3 作为构造向量的值from(这反过来会用 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 以初始化 值。

【讨论】:

我的编译器不接受 3,3 周围的花括号。 “错误需要一个表达式”。 这可能意味着您使用的是 C++11 之前的编译器,或者您没有启用 C++11 扩展。你应该给你的结构一个构造函数并调用它。我会在答案中添加注释。 @BeeBand 或者,编写一个 Vanish makeVanish(int, int); 函数来为您构造对象。也就是说,如果您希望您的结构成为 POD。否则使用构造函数。 @juan 好的,它看起来像:Vanish* v = new Vanish; v-&gt;firstfield = val; v-&gt;secondfield = val; return v; 吗? @BeeBand 不!没有指针,没有new。只是 `vanish_vectors(NUM_COLUMNS, std::vector(NUM_ROWS, makeVanish(3, 3)));

以上是关于初始化结构向量向量的好方法(每个都有一个初始值)?的主要内容,如果未能解决你的问题,请参考以下文章

初始化向量向量

c ++初始化结构向量的正确方法

结构向量内的结构向量

使用 boost assign 初始化具有固定大小的向量的向量

使用 memset 初始化包含数组的结构向量

如何在带有向量作为值类型的地图中添加值?