जावा के ArrayList का C ++ संस्करण क्या है


83

बस सी ++ का उपयोग करने और हाल ही में मैंने लिखा एक सरल जावा प्रोग्राम को बदलने की कोशिश कर रहा है।

C ++ में Java ArrayList के समान पसंदीदा क्या है?


जवाबों:


88

मानक पुस्तकालय से std::vectorकक्षा का उपयोग करें ।


3
हम्म ... दूसरे जवाब से, ऐसा लगता है कि वेक्टर एक लिंक की गई सूची के रूप में लागू नहीं किया गया है? क्या मैं सही हू? मैं इस सूची को एक संग्रह के रूप में उपयोग कर रहा हूं जिसमें वस्तुओं का एक उच्च टर्नओवर होगा जो इसे जोड़ा और हटा दिया गया है। क्या यह सरणी वास्तव में सबसे अच्छा कार्यान्वयन है? या एक लिंक्ड-लिस्ट संस्करण है?
इंटरस्टार

5
@interstar - बिल्कुल सही। यदि आप वास्तव में लिंक-लिस्ट शब्दार्थ चाहते हैं, तो उपयोग करें std::list, हालांकि तब आप अनुक्रमणिका खो देते हैं (नहीं operator[]) तो यह वास्तव में एक सरणी नहीं है। listकि इसकी अपनी idiosyncracies है कि vectorअक्सर एक बेहतर विकल्प है। मानक सी ++ कंटेनरों में, आपको एक या दूसरे तरीके से समझौता करना होगा। देखिए deque, जो आपके लिए बेहतर परफॉरमेंस दे सकता है। यह ( vectorबनाम ) आसान बनाम dequeबनाम मापने के लिए आसान है listक्योंकि वे कोड में बड़े पैमाने पर विनिमेय हैं - बस अपने कंटेनर के लिए एक टाइपिडिफ का उपयोग करें typedef vector<MyObj> MyList
स्टीव टाउनसेंड

ठीक है, मैं पहले वेक्टर की कोशिश करूँगा। क्योंकि सूचकांक उपयोगी है। यदि यह बहुत धीमा है तो मैं लिंक-लिस्ट में जा सकता हूं। धन्यवाद
INTERSTAR

2
@interstar, ArrayListजैसा कि आप नाम से अनुमान लगा सकते हैं, लिंक की गई सूची के रूप में लागू नहीं किया गया है। आप सोच रहे होंगे LinkedList। इसके अलावा, भले ही आपके पास सूची में जोड़ी और हटा दी गई वस्तुओं का एक उच्च टर्नओवर है, vectorफिर भी इससे भी तेज हो सकता है listजब तक आप इसके लिए पर्याप्त स्थान आवंटित करते हैं कि शुरू में इसे फिर से आवंटित करने की आवश्यकता न हो (अर्थात, इसे दें अधिकतम स्थान जो कभी भी चाहिए)।
काइल स्ट्रैंड

@KyleStrand दिलचस्प है। मैंने हमेशा यह माना कि ArrayList का अर्थ है "एक सरणी-जैसी चीज़ जो कि एक लिंक्ड-लिस्ट के रूप में लागू की गई है", बल्कि "ऐरे की तरह लागू की गई चीज़ जैसी लिंक्ड-लिस्ट" के बजाय।
इंटरस्टार

63

अतिरिक्त बिंदुओं के एक जोड़े को vectorयहाँ का उपयोग करें।

विपरीत ArrayListऔर Arrayजावा में, आपको vectorएक सरणी के रूप में इलाज के लिए कुछ विशेष करने की आवश्यकता नहीं है - सी ++ में अंतर्निहित भंडारण को सन्निहित और कुशलता से अनुक्रमित होने की गारंटी है।

इसके विपरीत ArrayList, एक vectorकुशलता से एक पूर्ण-वस्तु के रूप में बिना एनकैप्सुलेशन के आदिम प्रकार पकड़ सकता है।

किसी से आइटम निकालते समय vector, ध्यान रखें कि हटाए गए आइटम के ऊपर की वस्तुओं को सन्निहित भंडारण को संरक्षित करने के लिए नीचे ले जाना होगा। यह बड़े कंटेनरों के लिए महंगा हो सकता है।

सुनिश्चित करें कि यदि आप जटिल वस्तुओं को स्टोर करते हैं vector, तो उनके कॉपी कंस्ट्रक्टर और असाइनमेंट ऑपरेटर कुशल हैं। कवर के तहत, कंटेनर हाउसकीपिंग के दौरान C ++ STL इनका उपयोग करता है।

reserve()जावा से C ++ पर बाद में विस्तार पर स्मृति पुनः प्राप्ति को कम करने के लिए स्टोरेज अपफ्रंट (यानी वेक्टर निर्माण या आरंभीकरण समय पर) के बारे में सलाह ।


6
अब तक बेहतर जवाब, स्वीकार किया जाना चाहिए।
पॉल रूनी
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.