[英]Is using assign() a good way to initialise my C++ vector of structs?
The struct 结构
struct Vanish
{
int iCount;
int iRow;
};
I defined a std::vector
of Vanish
as a member of my class, and want to initialise it in the constructor like this: 我将Vanish
的std::vector
定义为我的类的成员,并希望像这样在构造函数中对其进行初始化:
class BigClass
{
public:
BigClass();
private:
std::vector<Vanish> tovanish;
};
void BigClass::BigClass()
{
Vanish empty = {0,0};
tovanish.assign(MAX_VANISH, empty);
}
Is there a better way, or is this considered OK? 有没有更好的方法,还是可以吗?
Is there a better way? 有没有更好的办法?
Yes, sure, 是的当然
BigClass::BigClass() : tovanish(MAX_VANISH) {}
This gives you a vector with MAX_VANISH
value-initialized Vanish
elements. 这为您提供了一个具有MAX_VANISH
值初始化的Vanish
元素的向量。
It is better to do that in the constructor's initializer list: 最好在构造函数的初始化程序列表中执行此操作:
BigClass::BigClass()
: tovanish(MAX_VANISH)
{
}
That way, you'll avoid possible vector reallocations. 这样,您将避免可能的向量重新分配。 Note that you vector's constructor will value-initialize its elements. 请注意,vector的构造函数将对其元素进行值初始化。 Value-initialization of the int
members in Vanish
just zeroes them. Vanish
int
成员的值初始化只是将它们Vanish
。
Note that in C++11, using uniform-initialization you could specify other values easily: 请注意,在C ++ 11中,使用统一初始化可以轻松指定其他值:
BigClass::BigClass()
: tovanish(MAX_VANISH, {42, 24})
{
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.