std::vector
वस्तुओं को "डायनामिक" (जैसा कि आप उन्हें कहते हैं) चीजों को स्टोर करने का एक अच्छा तरीका है, लेकिन वेक्टर का वास्तविक लाभ यह नहीं है कि आप जिस चीज को स्टोर कर रहे हैं वह बदल सकता है, लेकिन यह कि वेक्टर में वस्तुओं की संख्या न्यूनतम बिना बदल सकती है अपनी ओर से प्रयास। वर्णन करने के लिए, क्या आप अपनी Item
वस्तुओं को एक सरणी के रूप में संग्रहीत करने के लिए थे , आपको संकलन-समय ( Item items[SIZE];
) पर सरणी के आकार को ठीक करना होगा , जिसका अर्थ है कि आपके पास वस्तुओं पर एक निश्चित ऊपरी सीमा है (अन्य मुद्दों के बीच, जो ' इस विशिष्ट विषय के लिए प्रासंगिक है और इसलिए मैं उन पर छोड़ दूंगा)।
आप गतिशील रूप से रन-टाइम पर सरणी आवंटित कर सकते हैं ( Item * items = new Item[SIZE];
) जो आपको बाद में नए स्टोर आवंटित करने, आइटमों की प्रतिलिपि बनाने और पुराने संग्रहण को हटाने के द्वारा सरणी का आकार बदलने देगा। हालाँकि, यह आपके लिए बहुत अधिक काम है।
सौभाग्य से, std::vector
यह आपके लिए क्या करता है - यह एक गतिशील रूप से आकार का कार्यान्वयन है, अनिवार्य रूप से, और आपके लिए अपनी वर्तमान क्षमता से परे सरणी को बढ़ाने के लिए स्मृति प्रबंधन को संभालता है। यह निश्चित रूप से विकल्प है जो मैं आपको अभी के लिए आगे बढ़ाने का सुझाव दूंगा - लेकिन ध्यान दें कि आप अभी भी एक Item
वर्ग बनाना चाहते हैं ।
इसका उपयोग करना बहुत आसान है:
// Create an item list and two item objects to add to it.
std::vector<Item> items;
Item fireballPotion("Potion of Fireball");
Item healingPotion("Potion of Healing");
// Add the items:
items.push_back(fireballPotion);
items.push_back(healingPotion);
// operator[] is supported for accessing items.
// This will print "Potion of Fireball" for example:
std::cout << items[0].GetName();
vector
वर्ग के लिए MSDN प्रलेखन शायद एक पढ़ने के लायक है, और यदि आप टेम्पलेट से परिचित नहीं हैं - जो कि vector
"कुछ भी" संग्रहीत करने की अनुमति देने के लिए उपयोग करता है - तो आपको मूल बातें भी ब्रश करना चाहिए। जो मुझे एक अंतिम बिंदु की ओर ले जाता है: जबकि ऐसा लगता है कि एक वेक्टर कुछ भी स्टोर कर सकता है, इसमें उस चीज के लिए अड़चनें हैं जो कभी-कभी होती हैं और ये कभी-कभी शुरुआती को फेंक देती हैं। विशेष रूप से, वेक्टर में आपके द्वारा संग्रहित किया जाने वाला प्रकार प्रतिलिपि योग्य होना चाहिए, क्योंकि वेक्टर को अपने आंतरिक भंडारण का आकार देते समय वस्तुओं की एक प्रतिलिपि बनाने की आवश्यकता होगी, उदाहरण के लिए। C ++ का तीन नियम यहां ध्यान रखने योग्य है।