[英]C++ Allocate Vector Size in class variable without default initialization
所以我有一個類(HostObject),里面有一個復雜類(object1)的向量。 如下面描述的偽代碼
#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時編寫此代碼的方式,向量將使用默認構造的Object1s進行初始化。 我的代碼需要一個向量,所以我希望編譯器知道向量的大小是什么,這樣它就可以適當地分配向量所需的內存。 我知道如果我想要一個更動態的分配,我可以使用reserve。
我想我的問題是:在定義向量時,它們是否可以為向量保留空間,不需要對象中的對象進行默認初始化或使用保留函數?
編輯:
我的目標是分配內存空間,這樣當我構造一個HostObject類型的對象數組時,get分配了正確的內存量。 是否根據默認構造函數的結果確定對象的內存大小?
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));
}
}
}
閱讀更多關於std::vector
您可以通過在默認構造函數中調用reserve()
來完成此操作。
#DEFINE ARRAY_SIZE 10
class HostObject {
//other member variables
vector<Object1> vec; //vec(ARRAY_SIZE); // not here
//default constructor
HostObject() {
//leave vector default constructed
vec.reserve(ARRAY_SIZE); // but here
}
//my custom constructor // no need to change, since push_back will increase size automatically
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));
}
}
}
還要考慮使用static unsigned array_size = 10;
作為類HostObject
的成員,以便您可以在每次創建HostObject
對象時動態更改大小。
HostObject ho1; // array size is 10
HostObject::array_size = 20;
HostObject ho2; // array size is 20
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.