我正在做这个有B矢量的类。我正在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;
}
答案 0 :(得分:5)
你可以简单地让向量默认构造(空),然后emplace_back进入它:
A(int size) {
_b.reserve(size);
for(int i = 0; i < size; i++){
_b.emplace_back(i);
}
}
如果你坚持使用pre-C ++ 11编译器,你可以将B对象推送到它中:
A(int size) {
_b.reserve(size);
for(int i = 0; i < size; i++){
_b.push_back(B(i));
}
}
对std::vector::reserve
的调用是为了避免在向量增大时重新分配。
答案 1 :(得分:0)
它无法编译。 B类没有setNumber函数。将矢量初始化为大小不需要您执行任何操作。它只是默认构造的对象数量等于指定的大小。 Vector有一个保留成员函数,允许您为一些元素分配足够的内存,而无需实际构造对象。也许这就是你所寻求的。显然,在准备执行某种形式的插入之前将其留空是另一种选择。希望一个或多个发布的答案会有所帮助。
class A{
std::vector<B> _b;
public:
A(int size){
_b.reserve(size);
}
};