std :: wstring की आंतरिक संरचना क्या है? क्या इसमें लंबाई शामिल है? क्या यह शून्य समाप्त हो गया है? दोनों?क्या wstring null समाप्त हो गया है?
उत्तर
यह लंबाई
हाँ शामिल हैं। यह सी ++ 11 मानक द्वारा आवश्यक है।
§ 21.4.4
size_type size() const noexcept;
1. रिटर्न: स्ट्रिंग में वर्तमान में चार वस्तुओं की तरह संख्या की गणना।
2. जटिलता: निरंतर समय।
नोट हालांकि, यह यूनिकोड से अनजान है।
यह शून्य समाप्त
हाँ है।यह सी ++ 11 मानक द्वारा भी आवश्यक है कि std::basic_string::c_str
[0, आकार()] की सीमा के लिए एक वैध सूचक देता है जिसमें my_string[my_string.size()]
मान्य होगा, इसलिए एक शून्य चरित्र।
§ 21.4.7.1
const charT* c_str() const noexcept;
const charT* data() const noexcept;
1. रिटर्न: एक सूचकp
ऐसी है कि प्रत्येकi
के लिएp + i == &operator[](i)
[0,size()]
में।
2. जटिलता: निरंतर समय।
3. की आवश्यकता है: प्रोग्राम वर्ण सरणी में संग्रहीत के किसी भी मान को परिवर्तित नहीं करेगा।
अच्छी तरह से मैंने कल्पना को पढ़कर सी # सीखा, मैं सी ++ के लिए भी ऐसा ही कर सकता हूं। मुझे इसकी एक प्रति कहां मिल सकती है? –
@ जोनाथनएलेन मैं मानक से नहीं सीखूंगा, यह मानक से भरा है इसलिए इसे पढ़ना मुश्किल होगा। हालांकि, आप कई ड्राफ्ट्स के साथ सी ++ 14 सीडी [यहां] (http://www.open-std.org/JTC1/SC22/WG21/docs/papers/2013/n3690.pdf) पा सकते हैं। मानकीकरण प्रक्रिया। – Rapptz
@ जोनाथनएलेन सबसे अच्छा मूल्य-मुक्त विकल्प [open-std.org] है (http://www.open-std.org/JTC1/SC22/WG21/); आप वहां आधिकारिक संस्करण नहीं प्राप्त कर सकते हैं, लेकिन आप नवीनतम ड्राफ्ट प्राप्त कर सकते हैं जो प्रिंट-स्टाइल में केवल अलग है। कुछ खोज करने में यह पता चलता है कि कौन सा सबसे पुराना-पुराना-प्रकाशित है, हालांकि। – Angew
हम नहीं जानते। यह कार्यान्वयन के लिए पूरी तरह से है। (कम से कम C++ 03 तक - स्पष्ट रूप से C++ 11 को आंतरिक बफर को 0-समाप्त होने की आवश्यकता होती है।) यदि आप जिसका उपयोग कर रहे हैं, तो आप COS+ मानक लाइब्रेरी कार्यान्वयन के स्रोत कोड को देख सकते हैं। कि से
अलावा, मैं इसे तार्किक अगर यह NUL-समाप्त और यह रूप में अच्छी तरह एक स्पष्ट लंबाई संग्रहीत था पाते हैं। यह अच्छा है क्योंकि तब यह और एक वैध सी स्ट्रिंग लंबाई वापस जाने के लिए लगातार समय लगता है:
size_t length()
{
return m_length;
}
const wchar_t *c_str()
{
return m_cstr;
}
यदि यह एक स्पष्ट लंबाई की दुकान नहीं किया था, तो size()
पात्रों को गिनना पड़ता अप NUL
को O(n)
में, जो आप इससे बच सकते हैं तो अपमानजनक है।
यदि, हालांकि, आंतरिक बफर एनयूएल-समाप्त नहीं किया गया था, लेकिन यह केवल लंबाई को संग्रहीत करता था, तो उचित एनयूएल-समाप्त सी स्ट्रिंग बनाने के लिए यह कठिन होगा: स्ट्रिंग को या तो अपने भंडारण को पुन: आवंटित करना होगा और 0 जोड़ें (और पुनर्वितरण एक महंगी ऑपरेशन है), या इसे पूरे बफर को कॉपी करना होगा, जो कि फिर से O(n)
ऑपरेशन है।
(चेतावनी: बेशर्म स्वयं को बढ़ावा देने - एक सी भाषा परियोजना में मैं वर्तमान पर काम कर रहा हूँ, मैं वास्तव में इस दृष्टिकोण लचीला स्ट्रिंग वस्तुओं को लागू करने के लिया है।)
यह है [अशक्त-समाप्त C++ होने की गारंटी 11] (http://stackoverflow.com/questions/6077189/ -शून्य-समाप्त होगा-stdstring-हमेशा होने में-C11-)। –
basic_string (जिसमें से wstring typedef है) टर्मिनेटर की कोई ज़रूरत नहीं है।
हां, यह अपनी लंबाई का प्रबंधन करता है।
यदि आपको स्ट्रिंग/wstring के एक शून्य-समाप्त (उर्फ सी स्ट्रिंग) संस्करण की आवश्यकता है, तो c_str() पर कॉल करें। लेकिन इसमें इसके अंदर एक शून्य चरित्र हो सकता है, जिस स्थिति में सी स्ट्रिंग को संभालने के लिए हर सी फ़ंक्शन काफी संपूर्ण स्ट्रिंग को देखने में विफल हो जाएगा।
मुझे डर है कि यह सवाल का जवाब नहीं देता है। ओपी स्ट्रिंग के ** आंतरिक कार्यान्वयन ** के बारे में पूछ रहा है, वह शायद '.c_str()' सदस्य समारोह के बारे में बहुत अच्छी तरह से अवगत है और जानता है कि इसका उपयोग क्यों और कब किया जाए। साथ ही, मुझे उम्मीद है कि आप सी मानक लाइब्रेरी में विस्तृत स्ट्रिंग हैंडलिंग फ़ंक्शंस के बारे में जानते हैं, जैसे 'wstrlen() '। –
असल में मैं एक पत्रकार हूं जो प्लेटफ़ॉर्म :: स्ट्रिंगरफेरेंस wchar_t * और wstring के संयोजन के साथ काम करता है, इस बारे में लिखने की कोशिश कर रहा है। स्पष्ट रूप से स्ट्रिंग रेफरेंस "को प्रतिलिपि बनाने के बिना काम करने के लिए एक नल टर्मिनेटेड स्ट्रिंग (wchar_t * या wstring)" की आवश्यकता होती है। या शायद उसका मतलब है "एक (शून्य प्रकार की तार की तरह समाप्त की गई स्ट्रिंग की आवश्यकता है) या wstring"। बहुत बुरे शब्दों में माता-पिता नहीं हैं। –
हां, मैंने अपने प्रश्न का उत्तर नहीं दिया, चुने गए उत्तर ने एक घंटे बाद मेरे जैसा ही तीन जवाब दिए। हो सकता है कि मुझे सिर्फ प्रश्न को संबोधित किए बिना एक लंबा गद्य लिखना चाहिए, या गलत व्याख्या करने के दौरान मानक को उद्धृत करना चाहिए। – DanielKO
- 1. viewbre.js घटना view.render() समाप्त हो गया है
- 2. ORA-28001: पासवर्ड समाप्त हो गया है
- 3. जांचें कि क्या SCNNode SCNACTION समाप्त हो गया है
- 4. अपस्ट्रीम का समय समाप्त हो गया (110: कनेक्शन का समय समाप्त हो गया)?
- 5. फेसबुक छवि यूआरएल समाप्त हो गया
- 6. क्यों "अनुमत स्मृति आकार समाप्त हो गया"?
- 7. htaccess - सशर्त पुनर्लेखन और समाप्त हो गया
- 8. एक्सएचआर लोडिंग समाप्त हो गया [...] लॉग संदेश
- 9. क्या हुआ अगर कोई एपीएनएस डिवाइस टोकन समाप्त हो गया?
- 10. सिनात्रा में डिफ़ॉल्ट सत्र का समय समाप्त हो गया है?
- 11. विजुअल स्टूडियो कोड (बनामोड) - लाइसेंस समाप्त हो गया है?
- 12. हेडर जावास्क्रिप्ट फ़ाइलों पर समाप्त हो गया है
- 13. कैसे जांचें कि धागा समाप्त हो गया है या नहीं?
- 14. गतिविधि को कैसे पता चलाना समाप्त हो गया है?
- 15. PHP: जाओ स्क्रिप्ट से पहले उत्पादन समाप्त हो गया है
- 16. मेरा वेब वर्कर क्यों समाप्त हो गया है?
- 17. लार्वेल 4 मुझे याद रखें समय समाप्त हो गया है
- 18. निदान "अनुरोध का समय समाप्त हो गया है" HttpExceptions
- 19. jqgrid घटना जब रीलोड समाप्त हो गया है?
- 20. एक्सएमपीपी ऐप समाप्त हो गया है और संदेश
- 21. 'user-images.githubusercontent.com' में छवियों का समय समाप्त हो गया है?
- 22. कैसे जांचें जब Shell32.Folder.CopyHere() समाप्त हो गया है
- 23. "Heroku रन" त्रुटि दिखाता है "CERT_HAS_EXPIRED: प्रमाणपत्र समाप्त हो गया"
- 24. आपका डेवलपर लाइसेंस समाप्त हो गया है (विंडोज 8)
- 25. मेरा समय समाप्त हो गया जेएमएस संदेश कहां है?
- 26. टाइमआउट समाप्त हो गया। पूल से कनेक्शन प्राप्त करने से पहले टाइमआउट अवधि समाप्त हो गई।
- 27. cudamemcpy त्रुटि: "लॉन्च का समय समाप्त हो गया और इसे समाप्त कर दिया गया"
- 28. INotifyPropertyChanged.Property हमेशा बदल गया NULL
- 29. टाइमआउट समाप्त हो गया। ऑपरेशन पूरा होने से पहले टाइमआउट अवधि समाप्त हो गई है या सर्वर
- 30. सी ++ गैर नल समाप्त हो गया चार सरणी आउटपुट
http://www.cplusplus.com/forum/general/46247/ – Krishnabhadra