जैसा कि आपने खुद कहा std::dynarray
है, एक निश्चित आकार के गतिशील सरणी के लिए है। यह resizable नहीं है। यह मोटे तौर पर एक सुधार से अधिक बोल रहा new T[N]
है और अधिक std::unique_ptr<T[]>(new T[N])
।
क्षमता का आकार बदलने या प्रबंधन करने की आवश्यकता नहीं है, इसका मतलब है कि आप कम जटिलता और कम स्थान पर डेटा संरचना को लागू कर सकते हैं।
इसके अलावा, std::dynarray
एक अजीब जानवर है जो इसे अलग-अलग, गैर-विशिष्ट तरीकों से लागू करने की अनुमति देता है, उदाहरण के लिए यह सरणी को स्टैक पर रखना संभव है। आवंटन फ़ंक्शन को कॉल करना "वैकल्पिक" है। आप सरणी के तत्वों के निर्माण के लिए एक आबंटक निर्दिष्ट कर सकते हैं, लेकिन यह प्रकार का हिस्सा नहीं है।
आपको यह भी आश्चर्य हो सकता है कि हमें क्यों std::dynarray
और चर-लंबाई सरणियों की आवश्यकता है। C ++ 14 में वीएलएएएस बहुत अधिक प्रतिबंधक हैं; वे केवल स्थानीय, स्वचालित चर हो सकते हैं और आवंटन नीति निर्दिष्ट करने का कोई तरीका नहीं पेश करते हैं, और निश्चित रूप से उनके पास मानक कंटेनर इंटरफ़ेस नहीं है।
"वर्तमान मसौदे" के 23.3.4.2 से कुछ उदाहरण (लीजिए, Google कैश):
explicit dynarray(size_type c);
प्रभाव:c
तत्वों के लिए भंडारण आवंटित करता है। मई या वैश्विक आह्वान नहीं हो सकता है operator new
।
template <class Alloc>
dynarray(size_type c, const Alloc& alloc);
प्रभाव: पूर्ववर्ती कंस्ट्रक्टर के समतुल्य सिवाय इसके कि प्रत्येक तत्व का उपयोग उपयोग-आबंटन निर्माण के साथ किया जाता है ।
सरणी तत्वों के निर्माण के लिए आप दिए गए आवंटनकर्ता का उपयोग कर सकते हैं या नहीं, यह एक वैश्विक विशेषता है:
टेम्पलेट संरचना का उपयोग करता है_आलोकेटर, Alloc>: true_type {};
आवश्यकता है: Alloc
एक एलोकेटर (17.6.3.5) होगा। [ नोट: इस विशेषता के विशेषज्ञता से अन्य पुस्तकालय घटकों को सूचित dynarray
किया जाता है जिनका निर्माण एक आवंटनकर्ता के साथ किया जा सकता है, भले ही इसके पास नेस्टेड एलाटेटर_टाइप न हो।]
संपादित करें: जोनाथन वैक्ली का उत्तर कहीं अधिक आधिकारिक और व्यावहारिक होने के लिए बाध्य है।