यहां एक बड़ा सौदा उस पर निर्भर करता है जिसका अर्थ है "गतिशील सरणी"। अधिकांश लोगों का मतलब कुछ है जहां स्मृति को सरणी के साथ आवंटित किया जाता है और सरणी-हटाकर मुक्त किया जाता है। यदि यह इरादा है, तो std::vector
के बराबर गुण होने पर संभव नहीं है।
कारण काफी सरल है: std::vector
नियमित रूप से संग्रहीत तत्वों की संख्या को पकड़ने के लिए आवश्यकतानुसार स्मृति की एक बड़ी राशि आवंटित करता है। इसके बाद विस्तार करने के लिए आवश्यक स्मृति में वस्तुओं को बनाता है। सरणी के साथ, हालांकि, आपके पास कोई विकल्प नहीं है - आप ऑब्जेक्ट्स की एक सरणी आवंटित कर रहे हैं, इसलिए यदि आप 100 ऑब्जेक्ट्स के लिए स्पेस आवंटित करते हैं, तो आप उस स्थान पर 100 ऑब्जेक्ट्स बनाते हैं (तुरंत) । इसमें बस बफर रखने के लिए कोई प्रावधान नहीं है जिसमें से कुछ भाग वास्तविक वस्तुएं हैं, और इनमें से एक और हिस्सा केवल सादा स्मृति है, जिसमें कुछ भी नहीं है।
मुझे लगता है कि यदि आप एक बिंदु खींचना चाहते हैं, तो std::vector
का अनुकरण करना संभव है और अभी भी सरणी के साथ स्थान आवंटित करना संभव है। ऐसा करने के लिए, आपको केवल char
की सरणी आवंटित करनी होगी, और फिर उस कच्ची मेमोरी स्पेस में ऑब्जेक्ट्स बनाने के लिए प्लेसमेंट new
का उपयोग करें। यह std::vector
के समान ही चीजों की अनुमति देता है, क्योंकि लगभग std::vector
जैसा ही है। हम अभी भी एक (संभावित) स्तर पर संकेत नहीं दे रहे हैं - std::vector
वास्तव में एक आवंटक ऑब्जेक्ट के माध्यम से स्मृति आवंटित करता है ताकि आप इसकी कच्ची मेमोरी को आवंटित कर सकें (डिफ़ॉल्ट रूप से यह std::allocator<T>
का उपयोग करता है, जो operator new
का उपयोग करता है, लेकिन यदि आप चाहते थे , आप वास्तव में एक आवंटक लिख सकते हैं जो new char[size]
का उपयोग करेगा, हालांकि मैं कल्पना नहीं कर सकता कि आप क्यों करेंगे)।
आप निश्चित रूप से, आवंटक ऑब्जेक्ट का उपयोग करने के लिए अपनी गतिशील सरणी लिख सकते हैं। उस बिंदु पर, सभी व्यावहारिक उद्देश्यों के लिए आपने std::vector
को एक (संभवतः) नए नाम के तहत पुनः संयोजित किया है। उस स्थिति में, @ एसबीआई अभी भी सही है: केवल तथ्य यह है कि यह मानकीकृत नहीं है इसका मतलब है कि यह अभी भी std:::vector
के मुख्य गुणों में से एक है - मानकीकृत होने की गुणवत्ता और पहले से ही उन सभी लोगों द्वारा ज्ञात है जो सी ++ को जानते हैं। इसके बावजूद, हम मानकीकरण को अनदेखा करते हैं, भले ही हमें std::vector
के समान गुण प्राप्त करने के लिए ब्रेकिंग पॉइंट को "गतिशील सरणी" वाक्यांश (और मैं सकारात्मक, परे) वाक्यांश को फैलाऊंगा।
स्रोत
2012-06-25 13:57:26
आप संकलक के साथ मुफ्त में भेजे गए बड़े एल्गोरिदम पुस्तकालय के बारे में भूल गए हैं। – DumbCoder
यह भी देखें http://stackoverflow.com/q/381621/1025391 – moooeeeep
ओह नहीं .. मैंने त्रुटि मुक्त कहा .. मैंने गलत लिखा है और अब – Rajesh