2012-06-02 22 views
11

मैं आमतौर पर अनिश्चित हूं जब एक बनाम दूसरे का उपयोग करना बेहतर होता है। वे दोनों सामान्य रूप से एक ही चीज करते हैं लेकिन क्या वे कर सकते हैं के मामले में वेक्टर अधिक लचीला है? सरणी कब उचित हैं?वेक्टर का उपयोग कब करें और सी ++ में सरणी का उपयोग कब करें?

+1

लगभग कभी भी ऐरे का उपयोग नहीं करना मेरा सुझाव है। लेकिन, सरणी से आपका मतलब है 'टाइप करें [] 'या' std :: array'? –

+0

@ रिचर्ड जे। रॉसआईआईआई प्रकार [] –

+0

सी ++ भावना में वेक्टर और एरे के बीच मुख्य अंतर यह है कि वेक्टर स्वचालित गतिशील स्मृति प्रबंधन करते हैं, जबकि सरणी तय की जाती है। – chris

उत्तर

14

आम तौर पर हमेशा एक बार वेक्टर गुंजाइश बाहर चला जाता है और आबंटित स्मृति ढेर पर बड़े करीने से रखा जाएगा और सभी स्मृति नियंत्रित किया जाएगा std::vector<T> का उपयोग कर के बाद से विनाश स्वत: हो जाएगा पसंद करते हैं तुम्हारे लिए। std::vector<T> आपको एक सरणी में जो कुछ भी मिलता है और यहां तक ​​कि एक गारंटी भी देता है कि तत्वों को स्मृति में संग्रहीत किया जाएगा (std::vector<bool> को छोड़कर)। std::vector<bool> सन्निहित bool रों की दुकान नहीं है

std::vector<bool> vb; 
vb.push_back(true); 
vb.push_back(false); 
vb.push_back(true); 
bool *pB = &vb[0]; 
if(*(pB+1)) 
{ 
    // do something 
} 

तथ्य है,:

std::vector<bool> के मामले में आप सावधान के बाद से इस तरह कोड टूट जाएगा रहना होगा। यह मानक में एक अपवाद है जो सी ++ 11 में तय किया गया है।

+2

सौभाग्य से 'std :: vector ' एक बार फिर ** सी ++ 11 ** –

+0

@ के-बॉलो राइट में एक वास्तविक कंटेनर है, इसके लिए खाते में पोस्ट संपादित किया गया है।* के लिए –

+0

+1 ** ढेर पर ** अच्छी तरह से ** रखा जाएगा * (जोर मेरा), जिसका अर्थ है कि गलती से सरणी के बाहर लिखना ढेर को तोड़ नहीं देगा। –

2

मैं एम्बेडेड सिस्टम के साथ काम करते समय केवल सरणी का उपयोग करता हूं, या जब कुछ एपीआई को इसकी आवश्यकता होती है (यानी उन्हें फ़ंक्शन के लिए तर्क के रूप में ले जाएं)। इसके अलावा, अगर केवल एक या दो स्थान हैं जहां मुझे सरणी का उपयोग करने की आवश्यकता होगी, या विशेष रूप से वेक्टर कार्यक्षमता की आवश्यकता नहीं है, तो वे vector.h के अतिरिक्त ओवरहेड की वजह से सरणी का उपयोग करने के लिए और अधिक समझ में आता है।

अन्यथा, बस वैक्टर :) का उपयोग

+1

जब आप किसी सरणी की अपेक्षा करते हैं तो वे वैक्टर पास कर सकते हैं: 'someFunc (&v[0]); ' – chris

+0

@chris, बहुत सच है। – kotakotakota

+0

आपका दूसरा बिंदु मान्य है। इस पर निर्भर करता है कि आप कितनी बार और कितनी बार सरणी का उपयोग कर रहे हैं, साथ ही साथ कार्यक्रम की ज़रूरतें, वेक्टर का ऊपरी भाग अत्यधिक हो सकता है। – chris

संबंधित मुद्दे