मैं निम्नलिखित कोड कोशिश कर रहा हूँ:क्या 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 :: वेक्टर है। मैं इसे खाली std :: वेक्टर में प्रारंभ करना चाहता हूं। इसे मैन्युअल रूप से करना है? मैंने सोचा कि आकार बदलने() विधि प्रत्येक _Struct तत्व के डिफ़ॉल्ट कन्स्ट्रक्टर कहा होगा। Thx
Ps। यहां इस्तेमाल किए गए structs के नाम केवल पहली चीजें हैं जो मेरे दिमाग में आती हैं। यह सिर्फ एक उदाहरण है। मेरा विजुअल स्टूडियो मुझे बताता है कि elem.data डीबग व्यू में, [0]()
पर मेल खाता है।
Ps। [0]()
भूल जाओ।
पहचानकर्ता जो अंडरस्कोर के साथ शुरू होते हैं उसके बाद अपरकेस अक्षर कार्यान्वयन के लिए आरक्षित होते हैं। –
मैं कल्पना नहीं कर सकता कि 'len = elem.data.size() 'क्रैश नहीं हो रहा है अगर किसी भी तरह' डेटा' प्रारंभ नहीं किया गया था (जो यह निश्चित रूप से होना चाहिए)। वास्तव में 'डेटा' में क्या है और आप वहां क्या होने की उम्मीद करते हैं? – Jon
वेक्टर में तत्व 'आकार' पर डिफ़ॉल्ट रूप से निर्मित होते हैं (एक पूर्णांक के लिए यह परिणाम 0 में) आपके कस्टम वर्ग के लिए, आपको अपना स्वयं का डिफ़ॉल्ट कन्स्ट्रक्टर परिभाषित करना चाहिए। –