std::vector
एक टेम्प्लेट क्लास है जो एक डायनेमिक ऐरे 1 को एनकैप्सुलेट करता है, जो कि हीप में संचित होता है, जो तत्वों के जुड़ने या हटने पर अपने आप बढ़ता और सिकुड़ता है। यह सभी हुक ( begin()
और end()
, पुनरावृत्तियों, आदि) प्रदान करता है जो इसे बाकी एसटीएल के साथ ठीक काम करते हैं। इसमें कई उपयोगी विधियां भी हैं जो आपको ऑपरेशन करने देती हैं जो एक सामान्य सरणी पर बोझिल होगा, जैसे कि वेक्टर के बीच में तत्वों को सम्मिलित करना (यह पर्दे के पीछे निम्नलिखित तत्वों को स्थानांतरित करने के सभी काम को संभालता है)।
चूंकि यह ढेर पर आवंटित स्मृति में तत्वों को संग्रहीत करता है, इसमें स्थिर सरणियों के संबंध में कुछ ओवरहेड है।
std::array
एक टेम्प्लेट क्लास है जो स्टैटिक-साइज़ ऐरे को एनकैप्सुलेट करता है, जो ऑब्जेक्ट के अंदर ही स्टोर होता है, जिसका मतलब है कि, यदि आप स्टैक पर क्लास को इंस्टेंट करते हैं, तो ऐरे खुद स्टैक पर होगा। इसका आकार संकलन समय पर जाना जाता है (यह एक टेम्पलेट पैरामीटर के रूप में पारित किया जाता है), और यह बढ़ या सिकुड़ नहीं सकता है।
यह तुलना में अधिक सीमित है std::vector
, लेकिन यह अक्सर अधिक कुशल होता है, विशेष रूप से छोटे आकारों के लिए, क्योंकि व्यवहार में यह ज्यादातर सी-स्टाइल सरणी के आसपास एक हल्का आवरण है। हालाँकि, यह अधिक सुरक्षित है, क्योंकि सूचक में निहित रूपांतरण अक्षम है, और यह std::vector
अन्य कंटेनरों के एसटीएल से संबंधित कार्यक्षमता प्रदान करता है , इसलिए आप इसे एसटीएल एल्गोरिदम और सह के साथ आसानी से उपयोग कर सकते हैं। किसी भी तरह, निश्चित आकार की सीमा के लिए यह बहुत कम लचीला है std::vector
।
एक परिचय के लिए std::array
, इस लेख पर एक नज़र डालें ; std::vector
इस पर होने वाले कार्यों के त्वरित परिचय के लिए , आप इसके प्रलेखन को देखना चाहते हैं ।
वास्तव में, मुझे लगता है कि मानक में उन्हें विभिन्न कार्यों की अधिकतम जटिलता के संदर्भ में वर्णित किया गया है (जैसे निरंतर समय में यादृच्छिक पहुंच, रैखिक समय में सभी तत्वों पर पुनरावृत्ति, लगातार परिशोधन समय में अंत में तत्वों को जोड़ना और निकालना, आदि), लेकिन AFAIK एक गतिशील सरणी का उपयोग करने के अलावा ऐसी आवश्यकताओं को पूरा करने का कोई अन्य तरीका नहीं है। जैसा कि @Lucretiel द्वारा कहा गया है, मानक को वास्तव में आवश्यकता होती है कि तत्वों को सन्निहित रूप से संग्रहीत किया जाता है, इसलिए यह एक गतिशील सरणी है, जिसे संग्रहीत किया जाता है जहां संबद्ध आवंटनकर्ता इसे डालता है।
std::vector
बनाम की तुलना के लिए देख रहा हूँstd::array
और कैसे शब्द अलग हैं।