एसटीएल के बारे में इतना अच्छा क्या है?
एसटीएल बहुत अच्छा है कि इसे बहुत जल्दी माना गया था और फिर भी सी ++ जेनेरिक प्रोग्रामिंग प्रतिमान का उपयोग करने में काफी सफल रहा। उन पर संचालित करने के लिए copy
, transform
... टेम्पलेट्स का लाभ लेने के ऐसा करने के लिए vector
, map
, ... और एल्गोरिदम:
यह कुशलता से डेटा संरचनाओं अलग कर दिया।
यह बड़े करीने से चिंताओं decoupled और अनुकूलन (Comparator
और Allocator
टेम्पलेट पैरामीटर) के हुक के साथ सामान्य कंटेनर प्रदान की है।
परिणाम बहुत ही सुरुचिपूर्ण (डीआरवाई सिद्धांत) है और संकलक अनुकूलन के लिए बहुत ही कुशल धन्यवाद ताकि किसी दिए गए कंटेनर के लिए हाथ से उत्पन्न एल्गोरिदम बेहतर करने की संभावना न हो।
इसका यह भी मतलब है कि यह आसानी से एक्स्टेंसिबल है: आप, जब तक कि यह एसटीएल अनुरूप iterators आप इसके साथ एसटीएल एल्गोरिदम का उपयोग कर सकेंगे को उजागर करता है अंतरफलक आप चाहते हैं के साथ अपने स्वयं कंटेनर बना सकते हैं!
और लक्षणों के उपयोग के लिए धन्यवाद, आप सादे पॉइंटर्स के माध्यम से सी-सरणी पर एल्गोरिदम भी लागू कर सकते हैं! पिछड़े संगतता के बारे में बात करो!
हालांकि, यह (शायद) बेहतर हो सकता था ...
क्या एसटीएल के बारे में इतना महान नहीं है?
यह वास्तव में मुझसे दूर pisses है कि एक हमेशा iterators का उपयोग करना होगा, मैं वास्तव में लिखने के लिए सक्षम होने के लिए खड़े हैं: std::foreach(myVector, [](int x) { return x+1;});
क्योंकि चेहरा यह, बार आप कंटेनर के पूरे से अधिक पुनरावृति करना चाहते हैं के सबसे। ..
लेकिन क्या बदतर है है उसकी वजह से है कि:
set<int> mySet = /**/;
set<int>::const_iterator it = std::find(mySet.begin(), mySet.end(), 1005); // [1]
set<int>::const_iterator it = mySet.find(1005); // [2]
[1]
और [2]
, पूरी तरह से अलग तरह से किया जाता है [1]
में जिसके परिणामस्वरूप होने हे (एन) जटिलता [2]
हे (लॉग एन) जटिलता है, जबकि! यहां समस्या यह है कि iterators सार बहुत अधिक है।
मेरा मतलब यह नहीं है कि इटरेटर योग्य नहीं हैं, मेरा मतलब यह है कि इटरेटर के मामले में विशेष रूप से प्रदान करना एक खराब विकल्प था।
मैं खुद को विचार पर कंटेनर पर विचार पसंद करता हूं, उदाहरण के लिए Boost.MPL के साथ क्या किया गया है, इसकी जांच करें। एक दृश्य के साथ आप परिवर्तन के एक (आलसी) परत के साथ अपने कंटेनर में हेरफेर। यह बहुत ही कुशल संरचनाओं कि आप कुछ तत्वों को फ़िल्टर करने, दूसरों आदि को बदलने की अनुमति देता है के लिए बनाता है ...
विचारों और अवधारणा विचारों जाँच हैं, मुझे लगता है, एसटीएल एल्गोरिदम के लिए एक बेहतर इंटरफ़ेस उत्पादन का मेल (और इस find
, lower_bound
, upper_bound
, equal_range
समस्या को हल करें)।
यह भी iterators की ख़राब ढंग से परिभाषित सीमाओं और अपरिभाषित व्यवहार है कि इसके बारे में परिणाम का उपयोग कर के आम गलतियों से बच जाएंगे ...
एसटीएल यह सी ++ मानक का एक हिस्सा है, "विशेष" नहीं है। 'बूस्ट' विशेष है। –
ओह हाँ, एसटीएल ** बहुत ** विशेष है। अन्य सभी मानक पुस्तकालयों को देखें और आप देखेंगे कि एसटीएल कितना विशेष है। – wilhelmtell
@ किरील: कड़ाई से बोलते हुए, एसटीएल पूरी तरह संदिग्ध है। सी ++ में एसटीएल की कोई अवधारणा नहीं है, केवल मानक लाइब्रेरी है। एसटीएल मानक पुस्तकालय के टेम्पलेट भागों या एसजीआई द्वारा प्रकाशित मूल मानक टेम्पलेट लाइब्रेरी, या यहां तक कि कुछ और भी संदर्भित कर सकता है। – GManNickG