विभिन्न कंटेनरों से इटरेटर्स की तुलना: एक चेतावनीपूर्ण कहानी
सी में, इटरेटर्स संग्रह को पार करने के लिए एक शक्तिशाली तंत्र प्रदान करते हैं। हालाँकि, विभिन्न कंटेनरों से इटरेटर्स का उपयोग करते समय सीमाओं के बारे में जागरूक होना महत्वपूर्ण है।
यह सवाल बार-बार उठता है कि क्या विभिन्न कंटेनरों से इटरेटर्स की तुलना करना कानूनी है। निम्नलिखित उदाहरण पर विचार करें:
std::vector foo;
std::vector bar;
std::cout यह अभिव्यक्ति पहली नज़र में हानिरहित लग सकती है, लेकिन यह वास्तव में अपरिभाषित व्यवहार उत्पन्न करती है। सी 11 मानक के अनुसार, पुनरावर्तकों की तुलना केवल तभी की जा सकती है यदि वे समान अनुक्रम के तत्वों को संदर्भित करते हैं। चूंकि फू और बार दो अलग-अलग वेक्टर हैं, इसलिए उनके पुनरावर्तक तुलनीय नहीं हैं। बाइनरी - ऑपरेटर दो पुनरावर्तक मानों के साथ तर्क के रूप में जो दो अलग-अलग श्रेणियों r1 और r2 (...) से प्राप्त किए गए थे, जो एक सामान्य श्रेणी की उपश्रेणियाँ नहीं हैं, अपरिभाषित है, जब तक कि स्पष्ट रूप से अन्यथा वर्णित न किया गया हो।"
यह प्रतिबंध कस्टम इटरेटर्स को लागू करने के लिए महत्वपूर्ण निहितार्थ हैं। यदि आप अपने कस्टम इटरेटर के लिए ऑपरेटर == को लागू करने की योजना बना रहे हैं, तो आपको यह सुनिश्चित करना होगा कि यह केवल उन इटरेटर की तुलना करता है जो समान सीमा के भीतर हैं।
इस नियम का पालन करने में विफलता अप्रत्याशित व्यवहार का कारण बन सकती है और अंततः हानिकारक है आपके कोड की विश्वसनीयता के लिए. इसलिए, यह ध्यान रखना महत्वपूर्ण है कि विभिन्न कंटेनरों से पुनरावर्तकों की तुलना करना सी में सख्त वर्जित है।
अस्वीकरण: उपलब्ध कराए गए सभी संसाधन आंशिक रूप से इंटरनेट से हैं। यदि आपके कॉपीराइट या अन्य अधिकारों और हितों का कोई उल्लंघन होता है, तो कृपया विस्तृत कारण बताएं और कॉपीराइट या अधिकारों और हितों का प्रमाण प्रदान करें और फिर इसे ईमेल पर भेजें: [email protected] हम इसे आपके लिए यथाशीघ्र संभालेंगे।
Copyright© 2022 湘ICP备2022001581号-3