आप लोगों इसलिए इस overcomplicated है। बेशक आप इसे सी ++ में कर सकते हैं। दक्षता के लिए सामान्य सरणी का उपयोग करना उनके लिए ठीक है। एक वेक्टर केवल समझ में आता है अगर वह समय से पहले सरणी के अंतिम आकार को नहीं जानता है, यानी, इसे समय के साथ बढ़ने की जरूरत है।
आप एक स्तर उच्च सरणी आकार का पता कर सकते हैं श्रृंखला में, एक टेम्प्लेटेड वर्ग, सबसे आसान है कोई गतिशील आवंटन और मेमोरी लीक का कोई मौका नहीं है क्योंकि:
template < int ARRAY_LEN > // you can even set to a default value here of C++'11
class MyClass
{
int array[ARRAY_LEN]; // Don't need to alloc or dealloc in structure! Works like you imagine!
}
// Then you set the length of each object where you declare the object, e.g.
MyClass<1024> instance; // But only works for constant values, i.e. known to compiler
आपको पता नहीं कर सकते हैं उस स्थान की लंबाई जहां आप वस्तु घोषित करते हैं, या यदि आप एक ही वस्तु को अलग-अलग लंबाई के साथ पुन: उपयोग करना चाहते हैं, या आपको अज्ञात लंबाई स्वीकार करनी होगी, तो आपको इसे अपने कन्स्ट्रक्टर में आवंटित करने और इसे अपने विनाशक में मुक्त करने की आवश्यकता है ... (और सिद्धांत में हमेशा यह सुनिश्चित करने के लिए जांचें कि यह काम करता है ...)
class MyClass
{
int *array;
MyClass(int len) { array = calloc(sizeof(int), len); assert(array); }
~MyClass() { free(array); array = NULL; } // DON'T FORGET TO FREE UP SPACE!
}
स्रोत
2012-09-04 21:19:05
I एफ आप नियमित रूप से सी ++ का उपयोग करने की योजना बनाते हैं, मैं दृढ़ता से आपको मानक टेम्पलेट लाइब्रेरी से परिचित कराने की सलाह देता हूं। यह डेटा के संग्रह * अधिक * आसान के साथ काम करता है। – Brian
एक तरफ के रूप में, वैक्टर पहले से ही आकार को जानने के बिना सरणी के साथ काम करने के लिए अपेक्षाकृत आसान बनाते हैं। आकार को पहले से जानना जरूरी नहीं है; आप push_back का उपयोग कर किसी भी तरह से वेक्टर के अंत में (amortized) ओ (1) समय के तत्वों को जोड़ सकते हैं। – Brian
वेक्टरों का उपयोग करने से नई समस्याएं आती हैं, क्योंकि जिस कक्षा में मैं वेक्टरिज़ करने की कोशिश कर रहा हूं, उसने "नए" ऑपरेटरों को संरक्षित किया है। लेकिन यह वह नहीं था जिसे मैंने कभी नहीं पूछा था। – zaratustra