C में, एक वेक्टर पर पुनरावृति करने के लिए दो सामान्य दृष्टिकोण हैं: पुनरावर्तक का उपयोग करना या सूचकांक का उपयोग करना। सूचकांकों का उपयोग करते समय, सूचकांक चर के प्रकार पर विचार करना महत्वपूर्ण है।
इटरेटर्स एक कंटेनर पर पुनरावृत्त करने का एक सुविधाजनक तरीका है। वे विभिन्न प्रकार के कंटेनरों के लिए एक समान इंटरफ़ेस प्रदान करते हैं, और वे तत्वों के कुशल ट्रैवर्सल की अनुमति देते हैं। निम्नलिखित कोड दर्शाता है कि इटरेटर्स का उपयोग करके वेक्टर पर पुनरावृति कैसे करें:
for (auto it = v.begin(); it != v.end(); it) { // do something with *it }
सूचकांकों का उपयोग करते हुए एक वेक्टर पर पुनरावृत्ति करते समय, एक हस्ताक्षरित सूचकांक चर का उपयोग करना महत्वपूर्ण है। ऐसा इसलिए है क्योंकि वैक्टर को 0 से आकार() - 1 तक अनुक्रमित किया जाता है, और एक हस्ताक्षरित चर इस सीमा को अधिक स्वाभाविक रूप से प्रस्तुत कर सकता है। निम्नलिखित उदाहरण में, वेक्टर को अनुक्रमित करने के लिए एक हस्ताक्षरित int का उपयोग किया जाता है:
for (int i = 0; iअहस्ताक्षरित सूचकांक चर का उपयोग करना खतरनाक क्यों हो सकता है
अहस्ताक्षरित सूचकांक चर का उपयोग करना खतरनाक हो सकता है क्योंकि यदि सूचकांक वेक्टर के आकार से अधिक हो जाता है तो इससे अपरिभाषित व्यवहार हो सकता है। ऐसा इसलिए है क्योंकि एक अहस्ताक्षरित चर अपने अधिकतम मूल्य तक पहुंचने पर चारों ओर लपेटता है, और इससे सूचकांक नकारात्मक हो सकता है, जो एक वेक्टर के लिए वैध सूचकांक नहीं है।
निम्नलिखित उदाहरण में, एक अहस्ताक्षरित int है वेक्टर को अनुक्रमित करने के लिए उपयोग किया जाता है, और यदि वेक्टर का आकार अहस्ताक्षरित पूर्णांक के अधिकतम मूल्य से अधिक है, तो सूचकांक चारों ओर लपेट जाएगा और नकारात्मक हो जाएगा, जिसके परिणामस्वरूप अपरिभाषित व्यवहार होगा:
for (unsigned int i = 0; iनिष्कर्ष
एक वेक्टर पर पुनरावृत्ति करते समय, एक हस्ताक्षरित सूचकांक चर का उपयोग करना हमेशा बेहतर होता है। ऐसा इसलिए है क्योंकि यह सुनिश्चित करता है कि सूचकांक हमेशा वेक्टर के लिए मान्य सीमा के भीतर रहेगा, और अपरिभाषित व्यवहार की संभावना से बचता है।
अस्वीकरण: उपलब्ध कराए गए सभी संसाधन आंशिक रूप से इंटरनेट से हैं। यदि आपके कॉपीराइट या अन्य अधिकारों और हितों का कोई उल्लंघन होता है, तो कृपया विस्तृत कारण बताएं और कॉपीराइट या अधिकारों और हितों का प्रमाण प्रदान करें और फिर इसे ईमेल पर भेजें: [email protected] हम इसे आपके लिए यथाशीघ्र संभालेंगे।
Copyright© 2022 湘ICP备2022001581号-3