M
कंटेनर +
N
एल्गोरिदम के साथ
, एक सामान्य रूप से कोड की M * N
टुकड़े की आवश्यकता होगी, लेकिन "गोंद" के रूप में अभिनय iterators के साथ, इस कोड के M + N
टुकड़े को कम किया जा सकता है।
उदाहरण: रन 3 कंटेनरों
std::list<int> l = { 0, 2, 5, 6, 3, 1 }; // C++11 initializer lists
std::vector<int> v = { 0, 2, 5, 6, 3, 1 }; // C++11 initializer lists
std::array<int, 5> a = { 0, 2, 5, 6, 3, 1 };
auto l_contains1 = std::find(l.begin(), l.end(), 1) != l.end();
auto v_contains5 = std::find(v.begin(), v.end(), 5) != v.end();
auto a_contains3 = std::find(a.begin(), a.end(), 3) != a.end();
auto l_count1 = std::count(l.begin(), l.end(), 1);
auto v_count5 = std::count(v.begin(), v.end(), 5);
auto a_count3 = std::count(a.begin(), a.end(), 3);
आप केवल 2 अलग एल्गोरिदम बुला रहे हैं पर 2 एल्गोरिदम, और केवल 3 कंटेनरों के लिए कोड है। प्रत्येक कंटेनर कंटेनर में begin()
और end()
इटरेटर पास करता है। भले ही आपके पास 3 * 2
उत्तर उत्पन्न करने के लिए कोड की रेखाएं हैं, लेकिन केवल 3 + 2
कार्यक्षमता के टुकड़े हैं जिन्हें लिखे जाने की आवश्यकता है।
अधिक कंटेनर और एल्गोरिदम के लिए, यह अलगाव कोड में संयोजक विस्फोट में एक बड़ी कमी है जो अन्यथा आ जाएगा: एसटीएल में 5 अनुक्रम कंटेनर, 8 सहयोगी कंटेनर और 3 कंटेनर एडाप्टर हैं, और लगभग 80 एल्गोरिदम हैं अकेले <algorithm>
में (यहां तक कि <numeric>
में उन लोगों की गिनती नहीं) तो केवल 16 + 80
16 * 80
के बजाय है कि आप, कोड में एक 13 गुना कमी! (बेशक, हर एल्गोरिदम हर कंटेनर पर समझ में नहीं आता है, लेकिन बिंदु स्पष्ट होना चाहिए)।
इटरेटर को 5 श्रेणियों (इनपुट, आउटपुट, फॉरवर्ड, बिडरेक्शनल और यादृच्छिक एक्सेस) में विभाजित किया जा सकता है, और कुछ एल्गोरिदम इटरेटर क्षमताओं के आधार पर विशेष संस्करणों में प्रतिनिधि होंगे। यह कुछ हद तक कोड में कमी को कम कर देगा, लेकिन हाथ में इटेटरेटर को सर्वोत्तम अनुकूलित एल्गोरिदम चुनकर दक्षता में काफी सुधार करेगा।
ध्यान दें कि एसटीएल जुदाई में पूरी तरह से संगत नहीं है: std::list
कार्यान्वयन विशिष्ट विवरण का उपयोग करता है खुद को सॉर्ट करने के लिए अपने स्वयं के sort
सदस्य समारोह है, और std::string
सदस्य समारोह एल्गोरिदम, जिनमें से अधिकांश को लागू किया जा सकता था की एक विशाल संख्या है गैर-सदस्य कार्य के रूप में।
मुझे आपके द्वारा लिखे गए एक शब्द को समझ में नहीं आया। :( – Mehrdad
ठीक है खेद भ्रम का कारण के लिए, मैं क्या मतलब है कि हम कंटेनरों के लिए विभिन्न वर्गों है, iterators आदि मैं अगर हम टेम्पलेट का उपयोग कर एक कक्षा में सभी डाल क्या गलत है आंकड़ा करना चाहते हैं, कंटेनर डेटा है और वे देखने के लिए कुछ इंटरफेस का खुलासा कर सकते हैं यह या संशोधित करते हैं। यही कारण है कि वे अलग कर रहे हैं? मेरा मतलब है क्यों वहाँ विभिन्न iterators हैं, एल्गोरिदम आदि – Rahul
[यह सवाल] (http://stackoverflow.com/questions/10380612/principles-behind-stl-design) कुछ तुम दे सकता है संकेत दिए गए। [यह साक्षात्कार] (http://www.sgi.com/tech/stl/drdobbs-interview.html) एलेक्स Stephanov, एसटीएल के निर्माता, के साथ भी कुछ ऐसी जानकारियां दी हैं। –