के साथ एक std :: वेक्टर को अनुक्रमणित करना मैंने नकारात्मक सूचकांक का उपयोग कर vector
को अनुक्रमणित करने का प्रयास किया। vector::at()
सदस्य फ़ंक्शन जांचता है कि निर्दिष्ट अनुक्रमणिका वेक्टर की सीमाओं के भीतर है, और यदि ऐसा नहीं होता है, तो out_of_range
अपवाद फेंक दिया जाता है।एक नकारात्मक इंडेक्स
vector<float> array; // sample vector
array.push_back(0.123);
array.push_back(1.234);
array.push_back(2.345);
array.push_back(3.456);
array.push_back(4.567);
int index = -1;
float f = array.at(index);
cout << f << endl;
vector::at()
सदस्य समारोह के हस्ताक्षर की आवश्यकता है कि निर्दिष्ट पैरामीटर vector<T>::size_type
प्रकार का है, और इस प्रकार के वेक्टर के लिए unsigned int
है, इसलिए संकलक int
से एक अंतर्निहित रूपांतरण (index
चर के प्रकार के) प्रदर्शन करना चाहिए unsigned int
पर। चूंकि index
मूल्य ऊपर के उदाहरण में -1
है, परोक्ष परिवर्तित index
4294967295
(कि unsigned int
प्रकार की अधिकतम मूल्य है): यह मान vector::at()
सदस्य समारोह है, जो एक out_of_range
अपवाद फेंकता में भेजा जाता है।
दूसरे शब्दों में, यह अपवाद फेंक दिया जाता है नहीं vector::at()
सदस्य समारोह में देखता है क्योंकि उस index
शून्य से भी कम है, बल्कि इसलिए कि परोक्ष परिवर्तित index
vector
के वर्तमान आकार से बड़ा होता है। क्या यह एक सही स्पष्टीकरण है?
हां, मूल रूप से। – Dave
हां, यह सही स्पष्टीकरण है। – syam