जहां तक मुझे पता है अपरिभाषित व्यवहार।
/*
* to disable iterator checking that complains that the iterators are incompatible (come from * different containers :-)
*/
#define _HAS_ITERATOR_DEBUGGING 0
std::vector<int> vec1, vec2;
std::vector<int>::iterator it1 = vec1.begin();
std::vector<int>::iterator it2 = vec2.begin();
if (it1 == it2)
{
std::cout << "they are equal!!!";
}
साथ वी.एस. 2010 में इस मामले में सच :-) में समानता परीक्षण रिटर्न, कंटेनर के बाद से खाली हैं और iterators की _Ptr सदस्य दोनों nullptr हैं।
कौन जानता है कि आपका कार्यान्वयन चीजों को अलग करता है और परीक्षण झूठी वापसी करेगा :-)।
संपादित करें:
देखें C++ Standard library Active Issues list "विभिन्न कंटेनरों के बीच 446 इटरेटर समानता"। शायद कोई यह देखने के लिए मानक जांच सकता है कि परिवर्तन अपनाया गया था या नहीं?
संभवतः यह सक्रिय मुद्दों की सूची पर नहीं है, इसलिए चार्ल्स बेली जिन्होंने इसका उत्तर भी दिया है, यह सही है कि यह अनिर्दिष्ट व्यवहार है।
तो मुझे लगता है कि विभिन्न कार्यान्वयन के बीच व्यवहार भिन्न हो सकता है (कम से कम सैद्धांतिक रूप से) और यह केवल एक समस्या है।
तथ्य यह है कि वीएस चेक के साथ आने वाले एसटीएल कार्यान्वयन में इटरेटर डीबगिंग सक्षम है, इस सटीक मामले (विभिन्न कंटेनरों से आने वाले इटेटर) कम से कम मेरे लिए गायनल्स एक बार और अधिक है कि जब भी संभव हो तो ऐसी तुलना से बचा जाना चाहिए ।
संबंधित प्रश्न: http://stackoverflow.com/questions/844768/how-is-stl-iterator-equality- स्थापित – jweyrich