बस सी ++ का उपयोग करने और हाल ही में मैंने लिखा एक सरल जावा प्रोग्राम को बदलने की कोशिश कर रहा है।
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 ++ पर बाद में विस्तार पर स्मृति पुनः प्राप्ति को कम करने के लिए स्टोरेज अपफ्रंट (यानी वेक्टर निर्माण या आरंभीकरण समय पर) के बारे में सलाह ।