2010-02-04 14 views
9

संभव डुप्लिकेट:
count vs length vs size in a collectionक्या "लंबाई" और "आकार" (प्रोग्रामिंग में, निश्चित रूप से) शब्दों के बीच कोई तकनीकी अंतर है?

विशेष रूप से

जावा में, पर Strings, आप string.length() कहते हैं, जबकि Lists में आप list.size() कहते हैं। क्या String के रूप में देखकर दो शर्तों के बीच कोई तकनीकी अंतर है, वास्तव में केवल chars की एक सूची है?

कोई टिप्पणी की सराहना की।

+1

शायद अंतर यह है कि 'लंबाई' अनुक्रमों के साथ प्रयोग किया जाता है (यानी कुछ संगत)। और सेट के साथ अधिक सामान्य 'आकार' का उपयोग किया जाता है (केवल वस्तुओं का संग्रह)? –

+0

http://stackoverflow.com/questions/300522/count-vs-length-vs-size-in-a-collection –

उत्तर

9

आदर्श रूप से, count आइटम की संख्या होगी, और size उठाए गए संग्रहण की मात्रा होगी (जैसा कि sizeof में)।

प्रैक्टिस में, सभी तीन (length, जो सबसे संदिग्ध है) कई व्यापक रूप से उपयोग की जाने वाली पुस्तकालयों में उलझ गए हैं, इसलिए इस चरण में उन पर एक पैटर्न लगाने की कोशिश करने का कोई मतलब नहीं है।

+2

+1 यह स्वीकार करने के लिए कि प्रोग्रामर सही नहीं हैं। –

+2

कभी-कभी 'आकार' का उपयोग वस्तुओं की संख्या के लिए किया जाता है, और 'क्षमता' संग्रहण की मात्रा के लिए होती है। –

+0

@litb, सी ++ के संबंध में, यह संभव नहीं है कि 'वेक्टर :: क्षमता' एक गैर-शून्य मान वापस कर सकता है हालांकि अभी तक कोई संग्रहण आवंटित नहीं किया गया है? उचित 'आकार बदलने' से पहले भंडारण का उपयोग करने का प्रयास करने के लिए यह अनिर्धारित व्यवहार होगा। तो एक कार्यान्वयन तब तक वास्तविक आवंटन में देरी कर सकता है - और फिर यह हमारे द्वारा पूछे जाने वाले से अधिक आवंटित भी हो सकता है। तो 'क्षमता' भंडारण उपयोग के वास्तविक विवरण की तुलना में कार्यान्वयन के संकेत के समान है। इसमें कोई संदेह नहीं है कि इस तरह का एक कार्यान्वयन कुछ मौजूदा कार्यक्रम तोड़ देगा, जो 'v.reserve (200)' करते हैं और फिर सीधे 'और वी [100] 'के लिए जाते हैं। –

3

मुझे ऐसा नहीं लगता है। एपीआई एक बड़ी टीम पर काम करने की वजह से अधिक संभावना है और अलग-अलग लोगों के नाम पर क्या होना चाहिए, विशेष रूप से उन शब्दों के साथ जो कुछ संदर्भ में समानार्थी हैं, जैसे कि इस मामले में आकार और लंबाई।

13

सामान्य रूप से, लंबाई() का उपयोग तब होता है जब कुछ स्थिर लंबाई होती है, जबकि आकार() का उपयोग एक चर लंबाई के साथ किया जाता है। अतीत में, मुझे दो लगभग समानार्थी शब्दों का उपयोग करने के लिए कोई अच्छा कारण नहीं है।

+1

में इसी तरह की चर्चा यह मानकर, लंबाई() *** अपरिवर्तनीय *** डेटा प्रकारों के लिए है * स्ट्रिंग * और आकार() *** परिवर्तनीय *** डेटा प्रकारों जैसे * सूची * के लिए है। – Alex

2

जैसा कि अन्य ने स्पर्श किया है, मुझे लगता है कि यह एक अर्थपूर्ण अंतर है। Arrays बहुत स्पष्ट रूप से परिभाषित हैं और लंबाई के रूप में जाना जाता है। वस्तुओं का संग्रह अधिक अस्पष्ट है, आंशिक रूप से क्योंकि इसका कार्यान्वयन (क्या यह एक सरणी है, लिंक्ड-लिस्ट, पेड़?) जरूरी नहीं है कि आपकी चिंता हो। एक पेड़ में वास्तव में लंबाई नहीं होती है, लेकिन इसका एक निश्चित आकार होता है, इसलिए आकार अर्थपूर्ण रूप से अधिक समझ सकता है।

+0

सरणी के लिए 'आकार' का उपयोग नहीं करना समझ में आता है क्योंकि सरणी के आकार होते हैं लेकिन यह तत्वों की संख्या नहीं है। एक 'int [5]' सरणी की लंबाई 5 और 20 का आकार (5 तत्व और प्रत्येक 4 बाइट्स है, 20 बाइट्स बनाते हैं)।लेकिन यह आपके पेड़ के उदाहरण के साथ टकराता है, जैसे पेड़ का आकार पेड़ में तत्वों की संख्या है, तो आप वास्तविक आकार को स्मृति में कैसे नामित करेंगे? इसलिए मैं पेड़ों के आकार का उपयोग नहीं करता बल्कि 'गिनती' या 'नंबरऑफनोड्स' का उपयोग नहीं करता। मैं सामान्य रूप से 'लंबाई' से बचता हूं, जब तक कि हम उन चीजों की बात न करें जिनके पास परिभाषा की लंबाई है, उदा। एक स्ट्रिंग की लंबाई (और आकार!) है लेकिन इसमें 'गिनती' नहीं होनी चाहिए। – Mecki

3

मेरे लिए,

"लंबाई" एक आदेश का अर्थ है, तो आप समाप्त करने के लिए शुरू से ही लंबाई माप रहे हैं।

"आकार" का तात्पर्य है कि आदेश, प्रारंभ या अंत को लागू किए बिना कितना बड़ा है।

0

मेरे लिए, "आकार" का उपयोग किसी संरचना या कंप्यूटर में बाइट व्यवस्थित करने के अन्य तरीके का वर्णन करते समय किया जाता है। यह जरूरी नहीं है कि इसे तुरंत चालू किया जाए। दूसरी तरफ, "लंबाई" का तात्पर्य है कि मेमोरी में बाइट्स का एक विशेष बफर किसी दिए गए बिंदु पर कितना बड़ा होता है।

उदा। आपके द्वारा प्रदान किए जा रहे बफर की लंबाई क्या है? संरचना x के आकार के रूप में यह बाइट्स की एक ही संख्या है।

संबंधित मुद्दे