... यह निश्चित रूप से उपयोगी है पासिंग रेंज का विकल्प। लेकिन कम से कम मेरे अनुभव में, यह एक दुर्लभ विशेष मामला है। मैं आमतौर पर पूरे कंटेनरों पर काम करना चाहता हूँ
आपके अनुभव में यह एक दुर्लभ विशेष मामला हो सकता है , लेकिन वास्तव में पूरे कंटेनर विशेष मामला है, और मनमाना रेंज सामान्य मामला है।
आपने पहले ही ध्यान दिया है कि आप वर्तमान इंटरफ़ेस का उपयोग करके पूरे कंटेनर केस को कार्यान्वित कर सकते हैं , लेकिन आप कन्वेक्शन नहीं कर सकते।
इसलिए, पुस्तकालय-लेखक के सामने दो इंटरफेस लागू करने, या केवल एक को लागू करने के बीच एक विकल्प था जो अभी भी सभी मामलों को कवर करता है।
एक रैपर फ़ंक्शन लिखना आसान है जो कंटेनर लेता है और उस पर कॉल () और एंड () शुरू होता है, लेकिन मानक पुस्तकालय में ऐसे सुविधा कार्य शामिल नहीं हैं
यह सच है, विशेष रूप से मुक्त कार्यों के बाद से std::begin
और std::end
अब शामिल हैं।
तो, मान लें कि पुस्तकालय सुविधा अधिभार प्रदान करता है:
template <typename Container>
void sort(Container &c) {
sort(begin(c), end(c));
}
अब इसे तुलनात्मक फ़ंक्शनल लेने वाले समकक्ष अधिभार प्रदान करने की भी आवश्यकता है, और हमें हर दूसरे एल्गोरिथ्म के लिए समकक्ष प्रदान करने की आवश्यकता है।
लेकिन हम कम से कम हर मामले को कवर करते हैं जहां हम एक पूर्ण कंटेनर पर काम करना चाहते हैं, है ना? खैर, काफी नहीं। विचार करें
std::for_each(c.rbegin(), c.rend(), foo);
यदि हम कंटेनरों पर परिचालन को पीछे करना चाहते हैं , तो हमें मौजूदा एल्गोरिथ्म के अनुसार एक और विधि (या तरीकों की जोड़ी) की आवश्यकता है।
तो, रेंज-आधारित दृष्टिकोण सरल अर्थों में अधिक सामान्य है:
- यह सब कुछ कर सकता है पूरे कंटेनर संस्करण कर सकता है
- पूरे-कंटेनर का दृष्टिकोण दोगुना या तिगुना हो जाता है, जबकि ओवरलोड की आवश्यकता होती है, जबकि अभी भी कम शक्तिशाली है
- रेंज-आधारित एल्गोरिदम भी कंपोजिटेबल हैं (आप इटरेटर एडेप्टर को स्टैक या चेन कर सकते हैं, हालाँकि यह आमतौर पर कार्यात्मक भाषाओं और पायथन में किया जाता है)
एक और वैध कारण है, निश्चित रूप से, यह है कि एसटीएल को मानकीकृत करने के लिए यह पहले से ही बहुत काम था, और सुविधा आवरणों के साथ इसे फुलाया जाना चाहिए, क्योंकि व्यापक रूप से इसका उपयोग सीमित समिति के समय का एक बड़ा उपयोग नहीं होगा। यदि आप रुचि रखते हैं, तो आप यहाँ Stepanov & Lee की तकनीकी रिपोर्ट पा सकते हैं
जैसा कि टिप्पणियों में बताया गया है, Boost.Range मानक में बदलाव की आवश्यकता के बिना एक नया दृष्टिकोण प्रदान करता है।