मैं अपनी सटीक आकार की क्षमता को कम करने के लिए std::vector
को 'सिकुंक-टू-फिट' करना चाहता हूं, ताकि अतिरिक्त मेमोरी मुक्त हो। मानक चाल एक वर्णित here हो रहा है:स्मृति-कुशल तरीके से std :: vector को फिट करने के लिए कैसे करें?
template< typename T, class Allocator >
void shrink_capacity(std::vector<T,Allocator>& v)
{
std::vector<T,Allocator>(v.begin(),v.end()).swap(v);
}
का हटना करने के लिए फिट स्मृति को बचाने के लिए है पूरे मुद्दे हैं, लेकिन इस विधि पहले एक गहरी प्रतिलिपि पैदा नहीं करता और फिर उदाहरणों स्वैप? तो किसी बिंदु पर - जब प्रतिलिपि बनाई जाती है - स्मृति उपयोग दोगुनी हो जाती है?
यदि ऐसा है, तो क्या कम करने के लिए एक और स्मृति-अनुकूल तरीका है? (मेरे मामले में वेक्टर वास्तव में बड़ा है और मैं मूल रूप से किसी भी समय मेमोरी में इसकी प्रतिलिपि नहीं ले सकता।)
डुप्लिकेट ?: http://stackoverflow.com/questions/1111078/reduce-the-capacity-of-an-stl-vector – ergosys
वास्तव में, वह स्मृति में दोनों वस्तुओं की अस्थायी प्रति को रोकना नहीं चाहता समय जब स्वैप हो रहा है। –
असल में, यही सवाल भी है (प्रतिलिपि से परहेज)। लिंक के लिए धन्यवाद। – Frank