वास्तव में, मानक निर्दिष्ट क्या होना चाहिए करता है:
यह vector
से है, लेकिन विषय सभी कंटेनरों के लिए एक ही है (list
, deque
, आदि ...)
23,2 .4.2 वेक्टर क्षमता [lib.vector.capacity]
void resize(size_type sz, T c = T());
6) प्रभाव:
if (sz > size())
insert(end(), sz-size(), c);
else if (sz < size())
erase(begin()+sz, end());
else
; //do nothing
कहना है कि: यदि आकार resize
करने के लिए निर्दिष्ट तत्वों की संख्या से कम है, उन तत्वों कंटेनर से हटा दिया जाएगा। capacity()
के संबंध में, यह इस बात पर निर्भर करता है कि erase()
क्या करता है।
मैं मानक में यह पता नहीं लगा सकते, लेकिन मैं यकीन है कि clear()
होने के लिए परिभाषित किया गया है कर रहा हूँ:
void clear()
{
erase(begin(), end());
}
इसलिए, प्रभाव clear()
capacity()
पर है भी प्रभाव erase()
उस पर है से जुड़ा हुआ है। मानक के मुताबिक:
23.2.4.3 वेक्टर संशोधक [lib.vector।संशोधक]
iterator erase(iterator position);
iterator erase(iterator first, iterator last);
4) जटिलता: टी का नाशक मिट तत्वों की संख्या के बराबर समय की संख्या कहा जाता है ....
इसका मतलब है कि तत्वों नष्ट हो जाएगा, लेकिन स्मृति बरकरार रहेगी। erase()
क्षमता पर कोई प्रभाव नहीं पड़ता है, इसलिए resize()
और clear()
का कोई प्रभाव नहीं पड़ता है।
जिस तरह से मैंने इसे पढ़ा है वह स्मृति उपयोग पर प्रभाव के बारे में पूछ रहा है - वह विशेष रूप से पूछता है कि क्षमता पर प्रभाव का आकार क्या है। मानक उस मामले में परिणाम निर्दिष्ट नहीं करता है लेकिन पूछने का एकमात्र कारण मैं सोच सकता हूं कि अप्रयुक्त स्मृति मुक्त करने की इच्छा है। अस्थायी चाल के साथ स्वैप इसे प्राप्त करने का मूर्ख तरीका है। – mattnewport
मानक इन परिचालनों के लिए क्षमता() की कमी निर्दिष्ट नहीं करके परिणाम निर्दिष्ट करता है। इसलिए यह कम नहीं हो सकता है। – MSalters
ऐसे कुछ वातावरण हैं जहां प्रारंभिक 'निर्माण' चरण के बाद आवंटित या मुक्त स्मृति को प्रतिबंधित किया गया है। वेक्टर इस माहौल में प्रयोग योग्य हैं जब तक कि कोई यह सुनिश्चित कर सके कि वे संचालन के दौरान आवंटित या मुक्त स्मृति का प्रयास नहीं करते हैं। तो यह सवाल इस स्थिति में प्रासंगिक है (जो मुझे यहां लाया)। – meowsqueak