वैक्टर में दो "लंबाई" गुण होते हैं, जिनका अर्थ अलग-अलग होता है:
size
वेक्टर में प्रयोग करने योग्य तत्वों की संख्या है। यह आपके द्वारा संग्रहित चीजों की संख्या है। यह एक वैचारिक लंबाई है।
capacity
यह है कि वेक्टर कितने मात्रा में फिट होगा कितने तत्व वर्तमान में आवंटित किए गए हैं।
capacity >= size
हमेशा सत्य होना चाहिए, लेकिन उनके लिए हमेशा समान होने का कोई कारण नहीं है। उदाहरण के लिए, जब आप किसी तत्व को हटाते हैं, तो आवंटन को सिकोड़ते हुए एक नई आबंटन को एक बाल्टी छोटी बनाने और शेष सामग्री को ऊपर ले जाने की आवश्यकता होगी ("आवंटित, चाल, मुक्त")।
इसी तरह, यदि capacity == size
आप एक तत्व जोड़ते हैं, तो वेक्टर आवंटन को एक तत्व (दूसरा "आवंटित, चाल, मुफ्त" ऑपरेशन) द्वारा विकसित कर सकता है, लेकिन आमतौर पर आप एक से अधिक तत्व जोड़ने जा रहे हैं। यदि क्षमता बढ़ाने की आवश्यकता है, तो वेक्टर अपनी क्षमता से अधिक बढ़ाएगा एक अधिक तत्वों से ताकि आप सब कुछ फिर से स्थानांतरित करने की आवश्यकता से पहले कई और तत्व जोड़ सकें।
इस ज्ञान के साथ, हम आपके प्रश्न का उत्तर दे सकते हैं:
std::vector<T>::resize()
सरणी का आकार बदलता है । यदि आप इसे अपने वर्तमान आकार से छोटा आकार देते हैं, तो अतिरिक्त वस्तुएँ नष्ट हो जाती हैं। यदि आप इसे अपने वर्तमान आकार से बड़ा आकार देते हैं, तो अंत में जोड़ी गई "नई" वस्तुएं डिफ़ॉल्ट-आरंभिक हैं।
std::vector<T>::shrink_to_fit()
वर्तमान आकार से मेल खाने की क्षमता को बदलने के लिए कहता है । (कार्यान्वयन इस अनुरोध का सम्मान कर सकते हैं या नहीं भी कर सकते हैं। वे क्षमता को कम कर सकते हैं, लेकिन आकार के बराबर नहीं बना सकते। वे शायद कुछ भी न करें।) यदि अनुरोध पूरा हो गया है, तो यह अप्रयुक्त हिस्से में से कुछ या सभी को छोड़ देगा। वेक्टर का आवंटन। जब आप वेक्टर का निर्माण कर रहे होते हैं तो आप आमतौर पर इसका इस्तेमाल करते हैं और कभी भी इसमें कोई और चीज नहीं डालेंगे। (यदि आप पहले से जानते हैं कि आप कितने आइटम जोड़ रहे हैं, तो कुछ भी करने std::vector<T>::reserve()
पर भरोसा करने के बजाय किसी भी आइटम को जोड़ने से पहले वेक्टर को बताने के लिए उपयोग करना बेहतर होगा shrink_to_fit
।)
तो आप resize()
यह बदलने के लिए उपयोग करते हैं कि वेक्टर में वैचारिक रूप से कितना सामान है।
shrink_to_fit()
वेक्टर में वैचारिक रूप से कितना सामान है, इसे बदले बिना वेक्टर को आंतरिक रूप से आवंटित किए गए अतिरिक्त स्थान को कम करने के लिए आप उपयोग करते हैं ।