2010-10-19 17 views
51

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

सी ++ में जावा ऐरेलिस्ट के लिए पसंदीदा समतुल्य क्या है?

+0

http://stackoverflow.com/questions/14426338/java-arraylist-in-c –

उत्तर

66

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

+2

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

+3

@interstar - बिल्कुल सही। यदि आप वास्तव में लिंक-सूची सेमेन्टिक्स चाहते हैं, तो 'std :: list' का उपयोग करें, फिर भी आप इंडेक्सबिलिटी (कोई 'ऑपरेटर []') खो देते हैं, इसलिए यह वास्तव में एक सरणी नहीं है। 'सूची' जिसमें इसकी अपनी मूर्खताएं हैं जैसे 'वेक्टर' अक्सर बेहतर विकल्प होता है। मानक सी ++ कंटेनर में, आपको एक तरफ या दूसरे समझौता करना होगा। 'डेक' देखें, जो आपके लिए बेहतर perf प्रदान कर सकता है। यह 'वेक्टर' बनाम 'डेक' बनाम 'सूची' को मापने के लिए अपेक्षाकृत आसान है क्योंकि वे कोड में काफी हद तक अदला-बदले हैं - बस अपने कंटेनर के लिए टाइपेडफ का उपयोग करें। 'टाइपपीफ वेक्टर माईलिस्ट '। –

+0

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

35

कुछ अतिरिक्त अंक vector का उपयोग फिर से करते हैं। सी ++ में अंतर्निहित भंडारण सन्निहित और कुशलता से इंडेक्स करने योग्य होने की गारंटी है -

ArrayList और जावा में Array के विपरीत, आप कुछ भी एक vector एक सरणी के रूप में इलाज के लिए विशेष करने की जरूरत नहीं है।

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

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

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

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

+1

दूर तक बेहतर उत्तर, स्वीकार किया जाना चाहिए। –

संबंधित मुद्दे