यदि मेरे पास कंटेनर है और clear()
पर कॉल करें, तो क्या केवल अंदर मौजूद सभी तत्वों को नष्ट कर देता है या वास्तव में यह आंतरिक रूप से नई स्मृति आवंटित/आवंटित करता है? क्या यह व्यवहार सी ++ मानक के दायरे से बाहर है? ideone (http://ideone.com/XQi8IT) पर एक त्वरित परीक्षणकंटेनर.क्लियर() मुक्त/आंतरिक बफर को पुन: आवंटित करता है?
unordered_set<int> mySet { 1, 2, 3, 4, 5 };
mySet.reserve(1000);
mySet.clear();
//Is this pointless/redundant
//or should I treat my container like it was just constructed?
mySet.reserve(1000);
पता चलता है कि के बाद एक कॉल स्पष्ट करने के लिए आंतरिक स्मृति बफर बनाए रखा है:
यह करने के लिए निर्भर करता है। तो, कम से कम unordered_set
पर g ++ के नए संस्करणों के लिए यह मामला है। मेरा सवाल 1 पर जाता है) मानक क्या कहता है, अगर कुछ और 2) क्या यह व्यवहार सभी कंटेनरों में सुसंगत है।
यह निर्दिष्ट नहीं है। Http://www.cplusplus.com/reference/vector/vector/clear/ देखें। इसलिए (वैक्टरों के लिए), आप shrink_to_fit –
@ साइबर का उपयोग कर सकते हैं - 'आकार बदलें' विधि 'unordered_set' और अन्य कंटेनर पर लागू नहीं होती है। यह सवाल अधिक सामान्य है, यह कुछ अलग पूछ रहा है। हालांकि दिलचस्प पढ़ा - धन्यवाद। – Mark
@ मार्क यह कंटेनर पर निर्भर करता है - उदाहरण के लिए, 'std :: map' जैसे पेड़ संरचनाओं में क्षमता नहीं है। जब आप पेड़ से एक मूल्य हटाते हैं, तो उस नोड को तुरंत नष्ट कर दिया जाता है और इसलिए 'साफ़() 'आवंटित सभी आंतरिक आवंटित मुक्त हो जाएगा। – cdhowie