यह संपूर्ण पुस्तकालय के लिए मानक डिजाइन तर्क है: एल्गोरिदम से अलग कंटेनर।
यदि आपने इसे अपना रास्ता दिया है, तो आपको प्रत्येक कंटेनर वाई के लिए प्रत्येक फीचर एक्स को लागू करना होगा, यदि आपके पास एम फीचर्स और एन कंटेनर हैं तो एम * एन कार्यान्वयन के लिए अग्रणी है।
इटरेटर्स का उपयोग करके और एल्गोरिदम कंटेनर के बजाय इटरेटर्स पर काम करते हैं, आपको केवल एम एल्गोरिदम प्लस एन इटरेटर इंटरफेस को लागू करना होगा।
यह अलगाव भी मतलब है कि आप आवेदन की असीम व्यापक गुंजाइश है: एल्गोरिदम बस हर पुस्तकालय कंटेनर के लिए इस्तेमाल नहीं किया जा सकता है, लेकिन किसी भी कंटेनर, वर्तमान या भविष्य, कि किसी को भी लिख सकते हैं और iterators के साथ लैस करने के लिए फैसला करता है के लिए । Finite बनाम अनंत पुन: उपयोग काफी मजबूत तर्क है! और जेनेरिक, फ्री इंटरफेस के माध्यम से एल्गोरिदम को कॉल करने से कोई कीमत नहीं बढ़ती है।
स्रोत
2011-09-03 11:33:46
आप इसे क्यों की आवश्यकता होगी? सदस्य कार्य केवल उद्देश्य को पूरा करते हैं यदि कार्यान्वयन को और अधिक कुशल बनाया जा सकता है (सेट :: खोज एक सेट पर std :: find() से अधिक कुशल है)।ओह, और यदि आप सर्वव्यापी '.begin()', en '.end()' कॉल से बचना चाहते हैं, तो [बूस्ट रेंज एल्गोरिदम] का उपयोग करें (http://www.boost.org/doc/libs/1_47_0/libs/ रेंज/doc/html/रेंज/संदर्भ/एल्गोरिदम/introduction.html)। मीठे सिंटैक्टिक चीनी – sehe
@sehe: या * कम * कुशल, जैसे 'std :: list :: sort() ':-) –
@ केरेक:' std :: list :: sort' विशेष है,' std :: sort' 'RandomAccessIterator' की आवश्यकता है, इसलिए यह सूचियों के लिए काम नहीं कर सका। –