मैं की तरह एक गतिशील सरणी है कहते हैं:सी ++ गतिशील सरणी के हटाया जा रहा भाग
int* integers2 = integers + 50;
delete[] integers2;
मैं न केवल हैं:
int* integers = new int[100];
वहाँ इस तरह के रूप सरणी का ही हिस्सा नष्ट करने के लिए एक रास्ता है सब कुछ 50 और उससे अधिक हटाएं, लेकिन अगर मैं मूल पूर्णांक सरणी पर एक और हटाएं [] को कॉल करता हूं, तो यह केवल स्मृति की सही मात्रा को हटा देगा और मूल रूप से आवंटित राशि और सीईजी गलती को हटाने की कोशिश नहीं करेगा।
मैं ऐसा क्यों करना चाहता हूं: मेरे पास डेटा संरचना है जो सरणी के स्तरों में संरचित है, और मैं इस डेटा संरचना को पूर्ण सरणी से बनाने में सक्षम होना चाहता हूं। इसलिए मैं
int* level1 = integers;
int* level2 = integers + 50;
int* level3 = integers + 100;
लेकिन जब स्तर 3 की आवश्यकता नहीं है, तो डेटा संरचना स्वचालित रूप से [] level3 को हटा देगी। मुझे यह जानने की ज़रूरत है कि यह सही तरीके से व्यवहार करेगा और सरणी में सबकुछ नष्ट नहीं करेगा। यदि ऐसा होगा तो मुझे केवल नए सरणी बनाने और सामग्रियों की प्रतिलिपि बनाने की आवश्यकता है, लेकिन प्रदर्शन कारणों से ऐसा करने से बचना अच्छा होगा।
संपादित करें: हर कोई इस निष्कर्ष पर कूद रहा है कि मुझे अपने डेटा संरचना के लिए पहली जगह गतिशील आकार बदलने वाले कंटेनर (यानी वेक्टर, डेक) का उपयोग करना चाहिए। मैं एक अच्छे कारण के लिए सरणी के स्तर का उपयोग कर रहा हूं (और वे समान रूप से आकार में नहीं हैं जैसे कि मैं इसे अपने उदाहरण में दिखता हूं)। मैं केवल अपनी डेटा संरचना में एक कन्स्ट्रक्टर रखने का एक अच्छा तरीका ढूंढ रहा था जो एक सरणी या वेक्टर में लेता है और मूल सामग्री को नई डेटा संरचना में कॉपी करने की आवश्यकता नहीं है।
std :: डेक वह है जिसे आप ढूंढ रहे हैं। –
नहीं, इसकी नहीं। असल में जो मैं खोज रहा हूं वह मूल सरणी से मूल्यों की प्रतिलिपि किए बिना सरणी से डेक बनाने का एक तरीका है। – Floss
'std :: deque' स्वचालित रूप से आकार देने वाली एक सरणी की तरह कार्य करता है। एक सीधी अप सरणी का आकार नहीं बदला जा सकता है (जब तक इसे 'मॉलोक' के साथ आवंटित नहीं किया जाता है, और उसके बाद केवल आकार दिया जाता है) –