2010-06-22 17 views
9

मैंने कहीं देखें कि यह उल्लेख है:सी ++ iterator?

for (itr = files.begin(); itr < files.end(); ++itr) // WRONG 
for (itr = files.begin(); itr != files.end(); ++itr) // ok 

क्यों पहली अभिव्यक्ति गलत क्या है? मैंने हमेशा पहली अभिव्यक्ति का उपयोग किया, और इसमें कोई समस्या नहीं थी।

उत्तर

21

आदेश तुलना में इस तरह के <, >, <=, >= के रूप में यादृच्छिक अभिगम iterators, लेकिन (जैसे लिंक की सूची पर द्विदिश iterators के रूप में) कई अन्य iterators के लिए काम करेंगे केवल समानता का परीक्षण (== और !=) समर्थन करते हैं। != का उपयोग करके आप बाद में कंटेनर को जितना अधिक कोड बदलने की आवश्यकता के बिना प्रतिस्थापित कर सकते हैं, और यह विशेष रूप से टेम्पलेट कोड के लिए महत्वपूर्ण है जिसे कई अलग-अलग कंटेनर प्रकारों के साथ काम करने की आवश्यकता है।

7

विभिन्न प्रकार के इटरेटर हैं। केवल यादृच्छिक-पहुंच इटरेटर < ऑपरेटर का समर्थन करते हैं। अन्य प्रकार के इटरेटर (बिडरेक्शनल, इनपुट, आउटपुट, और फॉरवर्ड) नहीं करते हैं। लेकिन सभी iterators == और != ऑपरेटरों का समर्थन करते हैं। इसलिए यदि आप != का उपयोग करते हैं तो आपका कोड सभी प्रकार के इटरेटर के साथ काम करेगा।

5

पूर्व केवल उन पुनरावृत्तियों के लिए काम करता है जो operator < का समर्थन करते हैं, जो सभी इटरेटर नहीं करते हैं।

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