gpt4 book ai didi

C++在没有默认初始化的情况下在类变量中分配 vector 大小

转载 作者:太空狗 更新时间:2023-10-29 21:16:17 24 4
gpt4 key购买 nike

所以我有一个类 (HostObject),其中包含一个复杂类 (object1) 的 vector 。比如下面描绘的伪代码

#DEFINE ARRAY_SIZE 10
class HostObject {
//other member variables
vector<Object1> vec(ARRAY_SIZE);

//default constructor
HostObject(){
//leave vector default constructed
}

//my custom constructor
HostObject(double parmeter1, double parameter2, doubleparameter3) {

//some code doing some calculations

for (int i = 0; i <ARRAY_SIZE; i++){

vec.push_back(Object1( double p1, int p2, double p3, intp4));

}
}
}

我知道每次创建 HostObject 时编写此代码的方式, vector 将使用默认构造的 Object1 进行初始化。我的代码需要一个 vector ,所以我希望编译器知道 vector 的大小,以便它可以适本地分配我的 vector 所需的内存。我知道如果我想要更动态的分配,我可以使用 reserve。

我想我的问题是:它们是一种在定义 vector 时为 vector 保留空间的方法,不需要默认初始化其中的对象或使用保留函数吗?

编辑:

我的目标是分配内存空间,这样当我构造一个 HostObject 类型的对象数组时,就会分配正确数量的内存。对象的内存大小是否根据默认构造函数的结果确定?

最佳答案

std::vector 没有用于保留容量的构造函数。保留容量的唯一方法是使用 reserve 成员函数。

#DEFINE ARRAY_SIZE 10
class HostObject {
//other member variables
vector<Object1> vec;

//default constructor
HostObject(){
vec.reserve(ARRAY_SIZE);
}

//my custom constructor
HostObject(double parmeter1, double parameter2, doubleparameter3) {
vec.reserve(ARRAY_SIZE);
//some code doing some calculations

for (int i = 0; i <ARRAY_SIZE; i++){

vec.push_back(Object1( double p1, int p2, double p3, intp4));

}
}
}

Read more关于 std::vector

关于C++在没有默认初始化的情况下在类变量中分配 vector 大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35496676/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com