2012-05-06 23 views
5

मुझे जानकारी का यह टुकड़ा नहीं मिल रहा है। मैं यहां एक अजीब परिस्थिति से निपट रहा हूं जहां मैं एक लूप के अंदर हूं और मुझे किसी भी समय यादृच्छिक जानकारी मिल सकती है। इस जानकारी को वेक्टर में संग्रहीत किया जाना है। अब प्रत्येक फ्रेम को यह सुनिश्चित करने के लिए इस वेक्टर को सेट करना होगा कि मैं अंतरिक्ष को समाप्त नहीं करूँगा (मैं इंडेक्सिंग का उपयोग कर वेक्टर में यादृच्छिक बिंदुओं में मूल्य लिख रहा हूं)।एसटीएल का वेक्टर आकार बदलना

अब यह मानते हुए कि कोड के इस टुकड़े को बदलने का कोई तरीका नहीं है, मैं जानना चाहता हूं, क्या वेक्टर "आकार" को अनदेखा करते हैं, अगर मैं एक तर्क भेजता हूं जो वास्तव में वेक्टर का आकार है? मुझे यह जानकारी कहां मिल सकती है?

उत्तर

9

MSDN संदर्भ से 1

कंटेनर के आकार का अनुरोध आकार की तुलना में कम है, तो _Newsize, तत्वों वेक्टर में जुड़ जाते हैं जब तक यह अनुरोध किया आकार तक पहुँचता है। यदि कंटेनर का आकार अनुरोधित आकार से बड़ा है, तो कंटेनर के अंत तक निकटतम तत्व तब तक हटा दिए जाते हैं जब तक कंटेनर आकार _ न्यूजइज़ तक पहुंच न जाए। कंटेनर की वर्तमान आकार का अनुरोध आकार के रूप में ही है, तो कोई कार्रवाई नहीं की

लिया जाता है आईएसओ सी ++ मानक (पेज 485 2)vector::resize

void resize (size_type sz , T c = T()); 

if (sz > size()) 
    insert (end() , sz - size() , c); 
else if (sz < size()) 
    erase (begin()+ sz , end()); 
else 
; // Does nothing 

के लिए इस व्यवहार को निर्दिष्ट करता है तो हाँ, वेक्टर इसे अनदेखा करता है और आपको अपने आप को चेक करने की आवश्यकता नहीं है।

0

किंडा-सॉर्टा।

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

जब विनिर्देश कहता है कि आकार के अंत से पहले के तत्व हटा दिए जाएंगे, तो इसका मतलब है जगह पर। असल में यह प्रत्येक तत्व के लिए _M_buff [i]। ~ टी() को हटा देगा। इस प्रकार आपकी ऑब्जेक्ट आवंटित को एक कार्यरत विनाशक मानते हुए हटा दिया जाएगा, लेकिन जिस स्थान पर ऑब्जेक्ट स्वयं कब्जा कर लेता है (यह आकार) नहीं होगा। वेक्टर बढ़ेगा, और बढ़ेगा, और अधिकतम आकार तक बढ़ेगा जिसे आपने कभी बताया है और यह मौजूद होने पर फिर से नहीं हट जाएगा।

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