在类构造函数上初始化向量
Posted
技术标签:
【中文标题】在类构造函数上初始化向量【英文标题】:Initializing a vector on a class constructor 【发布时间】:2014-03-07 17:39:58 【问题描述】:我正在做这个具有 B 向量的 A 类。我在 A 类的构造函数上初始化向量(我不确定这是否是正确的方法,但它可以编译)。除此之外,我遇到了一个问题,因为我不希望在初始化向量时使用 B() 的默认构造函数来初始化自己,因为这让我做一个 for 循环来设置我想要的值。如果向量位置为 NULL 或大小为 0 就可以了;
class B
int _t;
public:
B() _t = 1;
B(int t) : _t(t)
;
class A
std::vector<B> _b;
public:
A(int size): _b(size)
for(int i = 0; i < size; i++)
_b[i].setNumber(i);
;
int main()
int n = 3;
A _a(n);
return 0;
【问题讨论】:
如果一个零大小的向量是“好的”,那么不要调整它的大小。不要把 anything 放在初始化列表中,你会得到你想要的;一个空向量。 【参考方案1】:您可以简单地让向量默认构造(空),然后将 emplace_back 放入其中:
A(int size)
_b.reserve(size);
for(int i = 0; i < size; i++)
_b.emplace_back(i);
如果你被 C++11 之前的编译器卡住了,你可以 push_back B 对象进去:
A(int size)
_b.reserve(size);
for(int i = 0; i < size; i++)
_b.push_back(B(i));
对std::vector::reserve
的调用是为了避免随着向量大小的增长而重新分配。
【讨论】:
【参考方案2】:它不编译。 B 类没有 setNumber 函数。将向量初始化为一个大小不需要您做任何事情。它只会默认构造等于指定大小的对象数。 Vector 有一个保留成员函数,允许您为一些元素分配足够的内存,而无需实际构造对象。也许这就是你所寻求的。显然,在您准备好执行某种形式的插入之前将其留空是另一种选择。希望发布的一个或多个答案会有所帮助。
class A
std::vector<B> _b;
public:
A(int size)
_b.reserve(size);
;
【讨论】:
以上是关于在类构造函数上初始化向量的主要内容,如果未能解决你的问题,请参考以下文章