初始化结构向量向量的好方法(每个都有一个初始值)?
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->firstfield = val; v->secondfield = val; return v;
吗?
@BeeBand 不!没有指针,没有new
。只是 `vanish_vectors(NUM_COLUMNS, std::vector以上是关于初始化结构向量向量的好方法(每个都有一个初始值)?的主要内容,如果未能解决你的问题,请参考以下文章