std :: string length () और size () मेंबर फंक्शन


263

मैं इस प्रश्न के उत्तर को पढ़ रहा था और पाया कि वास्तव में एक विधि है जिसका नाम length()है std::string(मैं हमेशा उपयोग करता हूं size())। क्या std::stringकक्षा में इस पद्धति के होने का कोई विशेष कारण है ? मैं MSDN और CppRefernce दोनों को पढ़ता हूं, और वे इंगित करते हैं कि size()और के बीच कोई अंतर नहीं है length()। यदि ऐसा है, तो क्या यह वर्ग के उपयोगकर्ता के लिए अधिक भ्रमित नहीं कर रहा है?

जवाबों:


340

प्रलेखन के अनुसार , ये केवल पर्यायवाची शब्द हैं। size()अन्य एसटीएल कंटेनर (जैसे के साथ संगत वहाँ हो जाता है vector, map, आदि ) और length()चरित्र तार के सबसे लोगों के सहज धारणा के अनुरूप होना है। लोग आमतौर पर एक शब्द, वाक्य या पैराग्राफ की लंबाई के बारे में बात करते हैं , न कि उसके आकार के बारे में, इसलिए length()चीजों को अधिक पठनीय बनाने के लिए है।


9
माना। जब मैं टेम्प्लेट क्लासेस और फ़ंक्शन्स लिखता हूँ तो मैं उपयोग करता हूँ size()(यदि मैं कभी भी नॉन-स्ट्रिंग क्लासेस का उपयोग करता हूँ), लेकिन ज्यादातर समय मैं length()सादे स्ट्रिंग्स के साथ काम करते समय उपयोग करता हूँ ।
Marius

3
मेमोरी (बाइट्स में) के आकार () को वापस नहीं करता है, जबकि लंबाई () में वर्णों की संख्या होती है, जो केवल 1 चार = 1 बाइट के बाद से मेल खाते हैं?
बॉयन कुशलेव

4
नहीं, वे एक ही कार्य कर रहे हैं; वे प्रलेखन भी साझा करते हैं: en.cppreference.com/w/cpp/string/basic_string/size
टोड गैंबलिन

4
वे दोनों दूरी (s.begin (), s.end ()) के समतुल्य होने के लिए परिभाषित हैं, जहाँ शुरू () और अंत () CharT तत्वों पर चलने वाले हैं। चारटी एक टेम्पलेट पैरामीटर है जो यह निर्धारित करता है कि स्ट्रिंग में क्या है। Std :: string के लिए, CharT char है। Std :: wstring के लिए, CharT wchar_t है, जो आमतौर पर 2 या 4 बाइट्स होता है। वहां भी, दोनों लंबाई () और आकार () स्ट्रिंग में वर्णों की संख्या वापस करेंगे , बाइट्स की संख्या नहीं।
टॉड गैम्बलिन

5
आपको यह भूल जाना चाहिए कि कभी-कभी लोग UTF8 स्ट्रिंग को स्टोर करने के लिए std :: string का उपयोग करेंगे । और utf8 स्ट्रिंग चर लंबाई कोडिंग है , फिर आप स्ट्रिंग वर्ण की गिनती प्राप्त करने के लिए लंबाई () या आकार () का उपयोग नहीं कर सकते। वास्तव में वे सिर्फ तत्व की गिनती वापस करते हैं:std::string=> std::bacsic_string<char> count of char std::wstring => std::basic_string<wchar_t> count of wchar_t.
शीन तियान

16

रूबी के सिर्फ एक ही है, btw, पेशकश दोनों #length और #size सरणियों और हैश में आइटमों की संख्या (सी ++ केवल यह तार के लिए करता है) के लिए समानार्थी शब्द के रूप में।

न्यूनतमवादियों और लोगों का मानना ​​है कि "वहां एक होना चाहिए, और आदर्श रूप से केवल एक ही होना चाहिए, स्पष्ट रूप से इसे करने का तरीका" (जैसा कि पायथन के ज़ेन सुनता है), मेरा अनुमान है, ज्यादातर आपके संदेह से सहमत हैं, @ नवीन, जबकि पर्ल के प्रशंसक " ऐसा करने का एक से अधिक तरीका है "(या SQL का सिंटैक्स एक bazillion वैकल्पिक" शोर शब्दों के साथ "ओम्पटीन को समान रूप से एक अवधारणा को व्यक्त करने के लिए समान रूप से सिंटैक्टिक रूप देता है)" इसमें संदेह नहीं होगा कि रूबी और विशेष रूप से C ++, बस दूर तक नहीं जाते हैं इस तरह के समानार्थक अतिरेक की पेशकश में; ;-)।


9
इस मामले में यह आभारी है। पर्ल का व्याकरण और उपयोग आपको अपनी पसंद की शैली का उपयोग करके चीजों को व्यक्त करने देता है। एक ही चीज़ के लिए दो अलग-अलग शब्द होने से केवल Stackoverflow में खोज-शर्तों के साथ आना मुश्किल हो जाता है।
एड्रियन रत्नापाला

0

कोडिंग अभ्यास टूल (लेटकोड) का उपयोग करते समय ऐसा लगता है कि आकार () लंबाई की तुलना में तेज है () (हालांकि मूल रूप से नगण्य है)


-10

स्ट्रिंग की लंबाई == कितने बिट कि स्ट्रिंग होने, आकार == उन बिट्स का आकार, स्ट्रिंग में दोनों समान हैं यदि संपादक चरित्र का आकार आवंटित करता है 1 बाइट


7
गलत जवाब। स्वीकृत उत्तर में जुड़े दस्तावेज़ देखें।
स्टीफन डी कोक
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.