मैं लिख रहा हूँ एक iterator
(वास्तव में यह मेरे वर्तमान वस्तु के लिए const_iterator
है, और मैं एक reverse_const_iterator
भी बनाने के लिए भी चाहते हैं।सी ++ इटरेटर और रिवर्स इटरेटर
मैं चारों ओर देखा, ऐसा करने के तरीके को देखने के लिए और मैं this भर में ठोकर खाई:।
सूचना तथापि है कि जब एक इटरेटर उलट है, उलट संस्करण रेंज में एक ही तत्व को इंगित नहीं करता है, लेकिन एक करने के लिए इसे पूर्ववर्ती यह इसलिए है, आदेश की व्यवस्था करने में अतीत के अंत एक सीमा के तत्व के लिए: यह एक में एक अतीत-अंत-अंत तत्व को इंगित करने वाला इरेटर, रेंज के बाद, अंतिम तत्व ( पिछला) पर इंगित करने के लिए बदल दिया गया है ( उलट होने पर यह श्रेणी का पहला तत्व होगा)। और यदि किसी श्रेणी में पहले तत्व के लिए एक पुनरावर्तक उलट है, तो उल्टा इटरेटर पहले तत्व से पहले तत्व को इंगित करता है ( उलट होने पर यह सीमा का अतीत-अंत तत्व होगा)।
यह है कि क्या उपयोगकर्ताओं के नजरिए से होता है, या जब आप एक reverse_iterator
भिन्नता यह नहीं है यह दूर सार आप वस्तु आपको लगता है यह की ओर इशारा करते है मूल्य/संदर्भ देकर? क्या यह सिर्फ कार्यान्वयन विस्तार है?
मेरे समझ गया था:
for(i = obj.rbegin(); i != obj.rend(); i++)
for(i = obj.begin(); i != obj.end(); i++)
के बराबर था रिवर्स में छोड़कर। और इसलिए *i
पहले मामले में कंटेनर के माध्यम से पिछड़ा होगा, और दूसरे मामले में कंटेनर के माध्यम से आगे बढ़ेगा। क्या मेरा वृत्ति सही है?
यह सिर्फ काम करता है। –
एक साइड नोट के रूप में: इटरेटर्स के साथ काम करते समय आपको हमेशा वृद्धि के बजाय पूर्व-वृद्धि ('++ i') का उपयोग करना चाहिए क्योंकि यह अधिक कुशल हो सकता है। –