मैंने सोचा कि मैं सलाह का अपना छोटा बैच जोड़ूंगा।
पहली बात यह है कि मैं ध्यान रखना चाहता हूं कि iterator
और const_iterator
उनके सामान्य कार्यान्वयन में बहुत अधिक संभावना है। हालांकि, भले ही उनका कोड समान है, यह बिल्कुल समान नहीं है। यह टेम्पलेट्स के लिए begs।
दूसरी बात जो मैं नोट करना चाहता हूं वह यह है कि const_iterator
iterator
(निस्संदेह) से रचनात्मक होना चाहिए, लेकिन दूसरी तरफ नहीं।
तीसरी बात यह है कि मैं नोट करना चाहता हूं कि यदि आप map
-इंटरफ़ेस की तरह चाहते हैं, तो आपको reverse_iterator
और const_reverse_iterator
भी प्रदान करना होगा।
एक शैली के दृष्टिकोण से, मैं कक्षा में iterator
के कार्यान्वयन को अपने आप में नहीं डालता। मुझे यह अपठनीय लगता है जब कक्षा कार्यान्वयन इतने सारे कोड से घिरा हुआ है कि आप उपलब्ध प्रकारों और विधियों को देखने के लिए संघर्ष करते हैं। इस कारण से मैं कक्षा के बाहर कार्यान्वयन की सिफारिश करने की सिफारिश करता हूं।
अंत में, मैं निश्चित रूप से बूस्ट.इटरेटर की अनुशंसा करता हूं। आप इसका उपयोग नहीं कर सकते हैं, लेकिन सामग्री को पढ़ सकते हैं, यह आपको एक बार कोड लिखने और 4 प्रकार के लिए इसका उपयोग करने के बारे में अंतर्दृष्टि प्रदान करेगा!
त्वरित उदाहरण:
namespace detail {
template <class Value> class base_iterator;
}
template <class Value>
class container
{
public:
typedef detail::base_iterator<Value> iterator;
typedef detail::base_iterator<Value const> const_iterator;
typedef boost::reverse_iterator<iterator> reverse_iterator;
typedef boost::reverse_iterator<const_iterator> const_reverse_iterator;
};
मैं तुम्हारे बारे में पता नहीं है, लेकिन मैं अच्छा लग रहा है जब मैं काम के केवल एक चौथाई करते हैं और एक संकलक/पुस्तकालय मेरे लिए बाकी हिस्सों में भरने के लिए का लाभ उठाता है :)
स्रोत
2010-06-03 07:02:55
आपकी जानकारी के लिए, अधिकांश एसटीएल कार्यान्वयन अपने std :: मानचित्र को लाल-काले पेड़ पर आधारित करते हैं, इसलिए जब तक यह शैक्षणिक उद्देश्य के लिए नहीं है, तो आप स्वयं को बनाने के बजाय std :: map का उपयोग करने पर विचार कर सकते हैं। –