我試圖以下代碼:vector.resize()方法在調整大小時調用默認元素構造函數嗎?
struct _Struct2
{
void *ptr;
double dval;
};
struct _Struct
{
float fval;
int ival;
std::vector<_Struct2> data;
};
std::vector<_Struct> vec;
int main()
{
vec.resize(9);
for (int i = 0; i < vec.size(); i++)
{
_Struct &elem = vec[i];
int len = elem.data.size(); // elem.data is [0]()
}
}
調整大小(9)應分配類型_Struct的9個元素。而且,實際上它很有用。但是_Struct類型的每個元素都沒有被初始化,特別是數據元素,這是另一個std :: vector。我希望它被初始化爲空的std :: vector。必須手動執行此操作嗎?我認爲resize()方法會調用每個_Struct元素的默認構造函數。 Thx
Ps。 這裏使用的結構名稱只是我想到的第一件事情。這只是一個例子。我的Visual Studio告訴我,elem.data在調試視圖中對應於[0]()
。
Ps。 忘記[0]()
。
以下劃線和大寫字母開頭的標識符被保留用於實現。 –
我無法想象'len = elem.data.size()'不會崩潰,如果某種方式'data'沒有被初始化(它肯定應該是)。 「數據」究竟是什麼,你期望在那裏有什麼? – Jon
向量中的元素是在「resize」上默認構造的(對於這個結果爲0的整數)對於您的自定義類,您應該定義自己的默認構造函數。 –