2011-05-06 18 views
30

यदि it1 और it2 के बीच कोई अंतर है?std :: seter के लिए std :: inserter के लिए .begin() vs .end() का उपयोग करने के बीच कोई अंतर है?

std::set<sometype> s; 

auto it1 = std::inserter(s, s.begin()); 
auto it2 = std::inserter(s, s.end()); 
+1

क्या आपने कोई दस्तावेज पढ़ा है? Googling के माध्यम से पता लगाने के लिए यह वास्तव में आसान है। –

+0

अच्छी तरह से, वे दो अलग-अलग इटरेटर हैं, क्या इससे मदद मिलती है? इसके अलावा, आप बाल विभाजित करेंगे ... (यानी प्रोफ़ाइल खोजने के लिए!) – Nim

+0

@Nim - मुझे आश्चर्य है कि यह मानक – Loom

उत्तर

30

अभ्यास में, ज्यादा नहीं। यदि आप रिक्त set में पहले से ही तत्वों की बड़ी संख्या में तत्व डाल रहे हैं, तो दूसरा कुछ तेज़ होगा, लेकिन यह इसके बारे में है। std::insert_iterator कॉलर के साथ insert कॉल करता है; std::set प्रविष्टि संकेत के तुरंत बाद अगर यह संकेत के रूप में व्याख्या करता है, और स्थिर समय (एलजी एन के बजाए) में आवेषण करता है। (वास्तव में, अगर set खाली है, मुझे लगता है कि दोनों बिल्कुल एक ही काम करेंगे।)

6

http://www.sgi.com/tech/stl/insert_iterator.html

किसी क्रमित साहचर्य कंटेनर के मामले में से, तथापि, insert_iterator के निर्माता में इटरेटर लगभग अप्रासंगिक है । नए तत्व जरूरी नहीं कि एक संगत रेंज बनें; वे कुंजी द्वारा आरोही क्रम में, कंटेनर में उपयुक्त स्थान में दिखाई देंगे। जिस क्रम में वे डाले जाते हैं केवल दक्षता को प्रभावित करते हैं: सॉर्ट किए गए एसोसिएटिव कंटेनर में पहले से क्रमबद्ध श्रेणी डालना एक ओ (एन) ऑपरेशन है।

संबंधित मुद्दे