बस सी ++ का उपयोग करने और हाल ही में मैंने लिखा एक सरल जावा प्रोग्राम को बदलने की कोशिश कर रहा है।
C ++ में Java ArrayList के समान पसंदीदा क्या है?
जवाबों:
मानक पुस्तकालय से std::vectorकक्षा का उपयोग करें ।
std::list, हालांकि तब आप अनुक्रमणिका खो देते हैं (नहीं operator[]) तो यह वास्तव में एक सरणी नहीं है। listकि इसकी अपनी idiosyncracies है कि vectorअक्सर एक बेहतर विकल्प है। मानक सी ++ कंटेनरों में, आपको एक या दूसरे तरीके से समझौता करना होगा। देखिए deque, जो आपके लिए बेहतर परफॉरमेंस दे सकता है। यह ( vectorबनाम ) आसान बनाम dequeबनाम मापने के लिए आसान है listक्योंकि वे कोड में बड़े पैमाने पर विनिमेय हैं - बस अपने कंटेनर के लिए एक टाइपिडिफ का उपयोग करें typedef vector<MyObj> MyList।
ArrayListजैसा कि आप नाम से अनुमान लगा सकते हैं, लिंक की गई सूची के रूप में लागू नहीं किया गया है। आप सोच रहे होंगे LinkedList। इसके अलावा, भले ही आपके पास सूची में जोड़ी और हटा दी गई वस्तुओं का एक उच्च टर्नओवर है, vectorफिर भी इससे भी तेज हो सकता है listजब तक आप इसके लिए पर्याप्त स्थान आवंटित करते हैं कि शुरू में इसे फिर से आवंटित करने की आवश्यकता न हो (अर्थात, इसे दें अधिकतम स्थान जो कभी भी चाहिए)।
अतिरिक्त बिंदुओं के एक जोड़े को vectorयहाँ का उपयोग करें।
विपरीत ArrayListऔर Arrayजावा में, आपको vectorएक सरणी के रूप में इलाज के लिए कुछ विशेष करने की आवश्यकता नहीं है - सी ++ में अंतर्निहित भंडारण को सन्निहित और कुशलता से अनुक्रमित होने की गारंटी है।
इसके विपरीत ArrayList, एक vectorकुशलता से एक पूर्ण-वस्तु के रूप में बिना एनकैप्सुलेशन के आदिम प्रकार पकड़ सकता है।
किसी से आइटम निकालते समय vector, ध्यान रखें कि हटाए गए आइटम के ऊपर की वस्तुओं को सन्निहित भंडारण को संरक्षित करने के लिए नीचे ले जाना होगा। यह बड़े कंटेनरों के लिए महंगा हो सकता है।
सुनिश्चित करें कि यदि आप जटिल वस्तुओं को स्टोर करते हैं vector, तो उनके कॉपी कंस्ट्रक्टर और असाइनमेंट ऑपरेटर कुशल हैं। कवर के तहत, कंटेनर हाउसकीपिंग के दौरान C ++ STL इनका उपयोग करता है।
reserve()जावा से C ++ पर बाद में विस्तार पर स्मृति पुनः प्राप्ति को कम करने के लिए स्टोरेज अपफ्रंट (यानी वेक्टर निर्माण या आरंभीकरण समय पर) के बारे में सलाह ।