स्ट्रिंग द्वारा उपयोग में स्मृति की मात्रा प्राप्त करने के लिए आपको capacity()
को प्रबंधन के लिए उपयोग किए गए ओवरहेड के साथ जोड़ना होगा। ध्यान दें कि यह capacity()
है और size()
नहीं है। क्षमता आवंटित वर्णों की संख्या निर्धारित करती है (charT
) आवंटित, जबकि size()
आपको बताती है कि उनमें से कितने वास्तव में उपयोग में हैं।
विशेष रूप से, std::string
कार्यान्वयन आमतौर पर * shrink_to_fit * सामग्री, इसलिए यदि आप एक स्ट्रिंग बनाने और उसके बाद अंत से तत्वों को हटाने, size()
कम कर नहीं किया जाएगा, लेकिन ज्यादातर मामलों में (इस कार्यान्वयन परिभाषित किया गया है) capacity()
नहीं होगा।
कुछ कार्यान्वयन आवश्यक स्मृति की सटीक मात्रा आवंटित नहीं कर सकते हैं, बल्कि मेमोरी विखंडन को कम करने के लिए दिए गए आकारों के ब्लॉक प्राप्त कर सकते हैं। एक कार्यान्वयन में तारों के लिए दो आकार के ब्लॉक की शक्ति का उपयोग किया गया, आकार 17
के साथ एक स्ट्रिंग 32
वर्णों को आवंटित किया जा सकता है।
स्रोत
2011-06-04 08:38:17
क्या यह कहना वैध है कि std :: string char array के समान है? या क्या कोई बड़ा अंतर है? – rzetterberg
हां, चार सरणी बिल्कुल 'std :: string' है। 'Std :: string' और' std :: vector 'के बीच कुछ कार्यान्वयन अंतर हैं, लेकिन वे जो डेटा संग्रहीत कर रहे हैं वह वही है। –
बस यह इंगित करना चाहते हैं कि 'std :: string :: size()' में 'NULL' वर्ण शामिल नहीं है, 'स्ट्रेल' द्वारा निर्धारित सम्मेलन का पालन करना है जिसमें इसे शामिल नहीं किया गया है। 'Std :: string' के वास्तविक कार्यान्वयन के लिए' स्ट्रिंग :: c_str() 'विधि को न्यूनतम ओवरहेड के साथ लागू करने के लिए' NULL' को समाप्त करने के लिए * संग्रहण * की आवश्यकता होती है। शायद [यह सवाल] (http://stackoverflow.com/q/4653745) मुझसे बेहतर बताता है। – rwong