std::string
के लिए कई constructors हैं। मैं पुनर्वितरण से बचने के लिए एक रास्ता तलाश रहा था और मुझे हैरान है कि एक भरने वाला कन्स्ट्रक्टर है लेकिन कोई "रिजर्व" कन्स्ट्रक्टर नहीं है।std :: string के लिए कोई रिजर्व कन्स्ट्रक्टर क्यों नहीं है?
std::string (size_t n, char c);
लेकिन कोई
std::string (size_t n);
तो मैं reserve()
कॉल करनी होगी के बाद यह पहले से ही डिफ़ॉल्ट (मेरे मामले में 16 बाइट्स), बस तुरंत पुनः आवंटित करने के लिए आवंटित करते हैं?
क्या ऐसा कोई कारण है कि ऑब्जेक्ट बनने के बजाय सीधे स्थान आरक्षित करने के लिए ऐसा कोई कन्स्ट्रक्टर नहीं है, इसे मैन्युअल रूप से करने के बजाय? या क्या मुझे कुछ याद आ रहा है और ऐसा करने का कोई तरीका है?
भरने निर्माता का उपयोग करना, क्योंकि यह स्मृति के माध्यम से लूप सिर्फ ओवरराइट प्राप्त करने के लिए होगा, और यह भी एक गलत आकार का कारण है, क्योंकि s.length()
रिपोर्ट N
बजाय 0
समय की बर्बादी है।
क्या आप वाकई 16 बाइट प्रति डिफ़ॉल्ट आरक्षित हैं? ('sizeof (std :: string) 'के साथ इसके साथ कुछ लेना देना नहीं है) – deviantfan
@deviantfan, यह कार्यान्वयन-परिभाषित – SingerOfTheFall
@ सिंगरऑफ दफॉल हां, 16 बाइट की तरह भी है। मैं विशेष रूप से डेवोलस कार्यान्वयन – deviantfan