2013-08-29 14 views
6

के लिए एक इटरेटर और वेक्टर पासिंग मैं कुछ समारोहएक समारोह

void print_elem(const std::vector<int>::iterator it, const std::vector<int> &vec) {/*.....*/} 

है, तो मैं बाहर छोड़ कि वेक्टर मूल वस्तु के लिए एक संदर्भ है, मैं वेक्टर की प्रतियां मिलता है। इटेटरेटर के लिए एक ही धारण क्यों सही नहीं है? इटरेटर को संदर्भ क्यों नहीं होना चाहिए?

उदाहरण के लिए यदि मैं वेक्टर के माध्यम से पुनरावृत्ति करना चाहता था, तो प्रत्येक तत्व को मुद्रित करें और जब मैं वेक्टर के अंत को पास करता हूं तब तक रुकना चाहता था, जब तक कि वे वेक्टर के संदर्भ को पास न करें, पुनरावृत्ति केवल पहले वेक्टर प्रति के माध्यम से लगातार चालू हो जाती है। लेकिन अगर मैं एक संदर्भ से गुजरता हूं तो पुनरावृत्ति मूल वेक्टर ऑब्जेक्ट के माध्यम से जाती है। लेकिन इटरेटर को संदर्भ के बिना वेक्टर के तरीके की प्रतिलिपि क्यों नहीं मिलती है?

उत्तर

10

इटेटरेटर एक सूचक मॉडल करता है, और इसकी संभावना है कि एक है, या इसमें वेक्टर या इसकी सामग्री को इंगित करने वाला एक होता है। जब आप इसे कॉपी करते हैं, तो कॉपी वास्तव में एक अलग इटरेटर होता है, लेकिन यह वही मान संग्रहीत करता है, इसलिए यह अभी भी एक ही चीज़ को इंगित करता है, जैसे पॉइंटर होगा।

+0

क्या यह पुनरावृत्ति है, तो एक पुनरावर्तक को संदर्भ तर्क के रूप में पास करने के लिए? किसी त्रुटि के फ़ंक्शन परिणामों के संदर्भ में एक इटरेटर को पास करना नोट करना महत्वपूर्ण है; लेकिन यह मामला नहीं है जब यह एक const_iterator है। क्या आपको पता है क्यों? क्या अंतर है जिसके बाद उत्तरार्द्ध त्रुटि नहीं है? -धन्यवाद। – jlstr

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