2010-12-13 21 views
15

कोई मुझे कैसे एक वेक्टर के लिए स्मृति को आबंटित करने का एक उदाहरण दे सकते हैं के लिए स्मृति आवंटित? मुझे कुछ लाइनों की ज़रूरत है। मैं एक सदिश कि 20-30 तत्वों में लगता है .. लेकिन जब मैं इसे अदालत और यह संकलन करने की कोशिश मैं केवल प्रविष्टियों में से पहले दो ..एक वेक्टर

+2

आप किसी भी कोड आप दिखा सकता है? आपके प्रश्न की आखिरी पंक्ति वास्तव में मुझे – Default

+2

भ्रमित करती है हां, ऐसा लगता है जैसे आपने अपने कोड में गलती की है। आप शायद इस पोस्ट, 'आकार पूरा करने के लिए मैन्युअल रूप से स्थान आरक्षित करने के लिए – Oystein

उत्तर

38

एक std::vector अपने स्वयं के स्मृति प्रबंधन करता है। आप reserve() और resize() तरीकों का उपयोग कर सकते हैं यह काफी स्मृति को आबंटित की है, मदों की एक निश्चित राशि फिट करने के लिए:

std::vector<int> vec1; 
vec1.reserve(30); // Allocate space for 30 items, but vec1 is still empty. 

std::vector<int> vec2; 
vec2.resize(30); // Allocate space for 30 items, and vec2 now contains 30 items. 
+1

() नहीं होना चाहिए' उनके डिफ़ॉल्ट निर्माता (यानी प्रकार है अगर 'Elem', तो' Elem() ') – swegi

+1

@swegi, द्वारा निर्माण के साथ तत्व कहते हैं डिफ़ॉल्ट, हां। 'आकार बदलें() 'एक दूसरा तर्क भी ले सकता है जिसे सभी नए तत्वों में कॉपी किया जाएगा। –

+1

लेकिन, अगर आप केवल '.push_back() 'का उपयोग कर रहे हैं, तो क्या आपको पुनः आवंटित/आकार बदलना होगा? – Charles

7

मिल this पर एक नजर डालें आप list.reserve का उपयोग (एन);

वेक्टर अपनी स्मृति का ख्याल रखता है, और तुम सच में सब पर रिजर्व() का उपयोग करने की जरूरत नहीं होनी चाहिए। यदि आप पहले ही जानते हैं कि वेक्टर सूची कितनी बड़ी होनी चाहिए, तो यह केवल एक प्रदर्शन सुधार है।

उदाहरण के लिए:

std::vector<int> v; 
v.reserve(110); // Not required, but improves initial loading performance 

// Fill it with data 
for(int n=0;n < 100; n++) 
    v.push_back(n); 

// Display the data 
std::vector<int>::iterator it; 
for(it = v.begin(); it != v.end(); ++it) 
    cout << *it;