वेक्टर लूप में '<' से '! = "का उपयोग करना बेहतर क्यों है? मैं सिर्फ अंतर नहीं देख सकता।वेक्टर लूप में '<' से '! =' का उपयोग करना बेहतर क्यों है? (सी ++)
उत्तर
क्योंकि आप इसे इटरेटर्स का उपयोग कर रहे हैं, और यह लूप को अन्य कंटेनरों के समान दिखता है, क्या आप सेट, सूची, अनॉर्डर्ड_सेट इत्यादि जैसे अन्य कंटेनर प्रकारों पर स्विच करना चुन सकते हैं, जहां < नहीं है जिसका अर्थ है।
वेक्टर इटरेटर के लिए, इससे कोई फर्क नहीं पड़ता। सामान्यतः, इटरेटर '<' बस '==' और '! =' का समर्थन नहीं कर सकते हैं। इसलिए, परीक्षण के अंत तक नहीं पहुंचने का सबसे सामान्य तरीका यह है कि यह जांचने के लिए है कि क्या इटरेटर! = कंटेनर.एंड()
कुछ इटरेटर प्रकार कम से कम ऑपरेटर का समर्थन नहीं करते हैं - वे केवल असमानता ऑपरेटर का समर्थन करें। यही कारण है कि आप अक्सर कम से कम ऑपरेटर को त्याग दिया जाएगा।
मुझे लगता है कि <vector.size()
के बजाय !=vector.end()
का उपयोग करने का मतलब है क्योंकि यह आपके प्रश्न से स्पष्ट नहीं था।
अंत() संस्करण को प्राथमिकता देने का एक कारण यह है कि आप वास्तव में क्या करने की कोशिश कर रहे हैं यह जांचना है कि आप अंत तक पहुंच गए हैं या नहीं।
सी में सरणी के लिए इस तरह के चेक करने के लिए मुहावरे आकार की तुलना में सूचकांक की जांच करना था, लेकिन यह एक "विरासत" व्यवहार है। तब जावा की दुनिया में फैल गया था (< array.length
) जब तक लोगों को एहसास हुआ कि सरणी बुराई है और जावा अंततः जेनेरिक का समर्थन करता है। सी ++ में, हालांकि, इस मुहावरे का उपयोग करने का कोई कारण नहीं है जब आपके पास वेक्टर के साथ काम करने के लिए एक अच्छी संग्रह कक्षा हो। यह अधिक पठनीय और अधिक रखरखाव योग्य है। उदाहरण के लिए, यदि आवश्यक हो तो यह अन्य संग्रहों पर स्विच करना आसान बनाता है, क्योंकि आप अभी भी अंत के बारे में बात कर रहे हैं।
यह हो सकता है कि प्रोग्रामर को रक्षात्मक कोडिंग चाल याद आए: यदि लूप के निष्पादन के दौरान कुछ गड़बड़ी हो जाती है, और सूचकांक/सूचक/इटरेटर अंत से आगे निकलता है, तो लूप चुपचाप '<' को छोड़कर बंद हो जाएगा बग अनजान। साथ! = अराजकता और क्रैश होने की संभावना है क्योंकि लूप खराब डेटा के साथ जारी रहता है, जो पहले के ठीक होने की इजाजत देता है।
कुछ इटरेटर को अनुमति नहीं है <इसलिए उस स्थिति में कोड संकलित या काम नहीं करेगा। इसका उपयोग करने का कारण यह है कि आप लूप को संशोधित किए बिना कंटेनर को स्विच कर सकते हैं। –
+1: यह रक्षात्मक कोडिंग चाल आपको अपने लूप की शुद्धता का सांख्यिकीय विश्लेषण और साबित करने की अनुमति देती है। यदि लूप सामान्य रूप से समाप्त हो जाता है, तो 'ए! = बी' स्थिति आपको बताती है कि इसे समाप्त कर दिया गया क्योंकि वास्तव में 'a == b', उदा। लूप बॉडी को आपके द्वारा अपेक्षित समय की सटीक संख्या निष्पादित की गई थी। 'ए <बी' स्थिति केवल आपको बताती है कि इसे समाप्त कर दिया गया क्योंकि' a> = b', उदा। लूप बॉडी को कम से कम कितनी बार आप उम्मीद की गई थी, शायद अधिक। संबंधित प्रश्न: http: // stackoverflow।कॉम/प्रश्न/132164/लूप-टर्मिनेशन-स्थितियां – palm3D
यह रक्षात्मक कोडिंग चाल भी [क्लाउडबल] के खिलाफ प्रोग्राम को मजबूत बनाती है (https://blog.cloudflare.com/incident-report-on-memory-leak-caused-by- क्लाउडफ्लारे-पार्सर-बग /) - प्रकार परिदृश्य। और कंप्यूटर अतिरिक्त काम नहीं करता है। नकारात्मकता सामान्यता का उपरोक्त नुकसान है। –
एक अन्य कारण: जब असेंबली में अनुवाद किया जाता है, तो शाखा शाखा के बराबर या शाखा-बराबर बराबर आमतौर पर अधिक तुलना शाखा से तेज़ होता है।
क्या आपके पास इसके लिए कोई दस्तावेज है? मैं हमेशा किसी भी मामले में मानता हूं कि यह मूल रूप से एक घटाव है - ईक/नेक मामले में आप शून्य ध्वज की जांच करते हैं और यदि आप नकारात्मक ध्वज की जांच करते हैं तो उससे कम में। – Eclipse
आम तौर पर, मैं इस तरह के कोड को एसटीएल एल्गोरिदम के समान टेम्पलेट फ़ंक्शन में रखना पसंद करता हूं, जैसे कि वे अंतर्निहित कंटेनर के बारे में अज्ञेयवादी हैं।
चूंकि < केवल वैक्टरों के लिए समझ में आता है, यह एक सामान्य कार्य के लिए एक गरीब फिट होगा। यदि आप < का उपयोग करते हैं, तो आप स्वयं को वेक्टर का उपयोग करने में लॉक कर रहे हैं।
- 1. सी ++ में "वेक्टर [x]" से बेहतर "vector.at (x)" का उपयोग क्यों कर रहा है?
- 2. filter_input() का उपयोग करना बेहतर क्यों है?
- 3. क्यों नीचे टेस्ट लूप बेहतर है?
- 4. क्या लूप काउंटर चर के रूप में पूर्णांक का उपयोग करना बेहतर है?
- 5. आईज़िप के बजाय ज़िप का उपयोग करना बेहतर क्यों है?
- 6. रीडोनली गुण छंद कार्यों का उपयोग करना बेहतर क्यों है?
- 7. सीधे सी ++ std में पढ़ा() का उपयोग करना: वेक्टर
- 8. एसटीएल वेक्टर realloc का एक बेहतर संस्करण है?
- 9. एमपीआई (सी ++) में वेक्टर उपयोग
- 10. फ़ोरैच लूप का उपयोग करने से एड्रेंज तेज क्यों है?
- 11. उपयोग करने से बेहतर क्यों उपयोग किया जाता है?
- 12. सी ++ वेक्टर
- 13. बेहतर फॉर-लूप वाक्यविन्यास?
- 14. एचटीएमएल में <label> का उपयोग करना महत्वपूर्ण है?
- 15. क्यों फोरैच लूप सी #
- 16. ओपनजीएल में स्पष्ट रूप से मैट्रिस का प्रबंधन करना बेहतर क्यों है?
- 17. क्या लूप के बाहर वर्रों को परिभाषित करना बेहतर है?
- 18. "थोड़ी देर" लूप का उपयोग क्यों करें?
- 19. वैक्टर के वेक्टर के माध्यम से लूप
- 20. आर का उपयोग करना सरल वेक्टर
- 21. सी ++ हेडर फ़ाइल में वेक्टर घोषित करना
- 22. घोषणा में "std :: वेक्टर <X> च();", "std :: वेक्टर <X>" एक इन्स्टेन्शियशन है?
- 23. कौन सा बेहतर है, और कब: सी # में एक आईडीस्पोजेबल पर कथन का उपयोग या निपटान() का उपयोग करना?
- 24. वेक्टर बनाम ArrayList जो बेहतर है?
- 25. अनंत लूप का उपयोग क्यों करें?
- 26. लैम्ब्डा अभिव्यक्ति में फ़ोरैच लूप के इटरेटर वैरिएबल का उपयोग करना - क्यों विफल रहता है?
- 27. siftDown siftUp से बेहतर क्यों है?
- 28. सी ++ में 'फॉर' लूप को टेम्पलेट करना?
- 29. विचारों में <% और <% = दोनों का उपयोग क्यों करें?
- 30. सी # में लूप के समानांतर का सही उपयोग?
यदि आप ओपनएमपी का उपयोग करना चाहते हैं, तो '<' वास्तव में '! =' से बेहतर है (अंतिम वाला वैध नियंत्रण भविष्यवाणी नहीं है)। –