द्वारा मूल्य बनाम std एल्गोरिदम इटरेटर पैरामीटर पास करना मुझे आश्चर्य है कि क्यों एसटीएल में कई टेम्पलेट एल्गोरिदम में तर्क संदर्भ द्वारा पारित नहीं होते हैं बल्कि मूल्य के अनुसार।संदर्भ बनाम मूल्य
template<class InputIterator>
typename iterator_traits<InputIterator>::difference_type
distance (InputIterator first, InputIterator last);
जब मैं इस समारोह के लिए दो iterators गुजरती हैं, वे कॉपी कर रहे हैं: यहाँ <iterator
> हैडर से एक उदाहरण है। मेरे अनुभवहीन विचार हैं कि यह इटरेटर वस्तुओं को कॉपी से बचने के लिए स्थिरांक-संदर्भ द्वारा इन iterators पारित करने के लिए बेहतर होगा:
template<class InputIterator>
typename iterator_traits<InputIterator>::difference_type
distance (const InputIterator &first, const InputIterator &last);
एक कह सकते हैं कि iterators सामान्य बहुत छोटी वस्तुओं में हैं और है कि उन्हें कॉपी करने महंगा नहीं है। लेकिन फिर भी: सस्ते प्रतिलिपि किसी भी प्रतिलिपि की तुलना में अधिक महंगी होगी।
तो एसटीएल-संस्करण में, इटेटर को मूल्य से पारित करने का क्या कारण है?
धन्यवाद!
एक बात जो मेरे दिमाग में आती है और जो संदर्भ में 'constnessness के खिलाफ है: इटरेटर को उनका उपयोग करते समय संशोधित करने की आवश्यकता होती है। एक अन्य कार्यान्वयन विवरण *** *** हो सकता है कि इटरेटर वास्तव में पॉइंटर्स के रूप में लागू किए गए हैं। तो ज्यादातर मामलों में संदर्भ हैं। यदि आप पॉइंटर को मूल्य से पास करते हैं, तो आप इसे एक बार कॉपी करते हैं लेकिन आवश्यकता होने पर ही इसे अस्वीकार करते हैं। यदि इटरेटर-पॉइंटर स्वयं को संदर्भ-सूचक द्वारा पारित किया जाता है, तो इसे फिर से संदर्भित किया जाना चाहिए, बस इटेटरेटर तक पहुंचने के लिए। और वह अनावश्यक है। –
@ शाकम ओह, धन्यवाद! :) –