दो कार्य बहुत अलग चीजें करते हैं!
resize()
विधि (और निर्माता के लिए तर्क गुजर कि के बराबर है) से जोड़ दिया जाएगा या वेक्टर के तत्वों की हटाने की उपयुक्त संख्या यह दिए गए आकार बनाने के लिए (यह उनके मूल्य निर्दिष्ट करने के लिए वैकल्पिक दूसरा तर्क है)। यह प्रभावित करेगा size()
, पुनरावृत्ति उन सभी तत्वों पर चला जाएगा, पुश_बैक उनके बाद सम्मिलित करेगा और आप सीधे उपयोग करके उनका उपयोग कर सकते हैं operator[]
।
reserve()
विधि केवल स्मृति आबंटित करता है, लेकिन पत्तियों यह अप्रारंभीकृत। यह केवल प्रभावित करता है capacity()
, लेकिन size()
अपरिवर्तित रहेगा। वस्तुओं के लिए कोई मूल्य नहीं है, क्योंकि वेक्टर में कुछ भी नहीं जोड़ा गया है। यदि आप तत्वों को सम्मिलित करते हैं, तो कोई वास्तविक स्थिति नहीं होगी, क्योंकि यह पहले से किया गया था, लेकिन यह एकमात्र प्रभाव है।
तो यह निर्भर करता है कि आप क्या चाहते हैं। यदि आप 1000 डिफ़ॉल्ट आइटम की एक सरणी चाहते हैं, तो उपयोग करें resize()
। यदि आप एक ऐसी सारणी चाहते हैं, जिसमें आप 1000 वस्तुओं को सम्मिलित करने की अपेक्षा करते हैं और एक-दो आवंटन से बचना चाहते हैं, तो उपयोग करें reserve()
।
संपादित करें: ब्लास्टफ़र्न की टिप्पणी ने मुझे इस सवाल को फिर से पढ़ने और एहसास कराया, कि आपके मामले में सही उत्तर मैन्युअल रूप से प्रचारित नहीं है । बस अंत में तत्वों को आवश्यकतानुसार डालें। वेक्टर स्वचालित रूप से आवश्यकतानुसार पुन: आबंटित होगा और उल्लिखित मैनुअल तरीके की तुलना में इसे अधिक कुशलता से करेगा। एक ही मामला जहां reserve()
समझ में आता है, जब आपके पास कुल आकार का यथोचित सटीक अनुमान होता है, जिसकी आपको पहले से आसानी से आवश्यकता होगी।
EDIT2: विज्ञापन प्रश्न संपादित करें: यदि आपके पास प्रारंभिक अनुमान है, तो reserve()
वह अनुमान है। यदि यह पर्याप्त नहीं है, तो वेक्टर को यह करने दें।
std::vector
।