ऐसा लगता है कि हर बार जब आप std::vector
पर कोई नया तत्व जोड़ते हैं, यदि खाली तत्व नहीं हैं, तो आवंटित तत्वों की संख्या दोगुना हो जाती है (कम से कम जीसीसी 4.9 में)। मुझे लगता है कि यह अमूर्त निरंतर समय जटिलता प्राप्त करने के लिए किया जाता है।std :: वेक्टर और मेमोरी आवंटन
जैसे, इस कोड को चलाने के बाद:
v.push_back (1);
v.push_back (2);
v.push_back (3);
v.push_back (4);
v.push_back (5);
v.shrink_to_fit(); // capacity is 5 now
v.push_back (6);
std::cout << v.capacity() << std::endl;
उत्पादन 10
स्मृति विवश प्रणालियों में है, वहाँ तो भी यह एक प्रदर्शन की कीमत पर है इस व्यवहार को रोकने के लिए किसी भी तरह से है दंड?
इसके अलावा, यह इंगित करना संभव होगा कि इसे केवल दोगुनी करने के बजाय तत्वों की एक निश्चित संख्या आवंटित करनी चाहिए?
मुझे पता है कि मैं नए तत्व जोड़ने से पहले std::vector::reserve()
पर कॉल कर सकता हूं, लेकिन यह मेरे मामले में एक गड़बड़ लगता है ... std::vector::shrink_to_fit()
पर कॉल करना एक और दृष्टिकोण है, लेकिन असुविधाजनक भी है।
क्या आप वास्तव में 'shrink_to_fit' पर कॉल के बाद क्षमता की जांच करते थे? – juanchopanza
गड़बड़ी से बचने के लिए, आप अपना खुद का मुफ्त फ़ंक्शन लिख सकते हैं जो एक वेक्टर और तत्व जोड़ने के लिए लेता है और फिर 'push.back' के बाद 'v.reserve (v.size() + 1)' करता है। – dlf
उस मामले में सरणी का उपयोग क्यों नहीं करें (यदि आपको निश्चित आकार की आवश्यकता है) – 4pie0