c++ - Not using iterators into a resized vectors -
मैं सी ++ प्रोग्रामिंग भाषा में पढ़ा है: विशेष संस्करण
इसे में iterators का उपयोग न करें एक आकार के वेक्टर
इस उदाहरण पर विचार करें।
vector & lt; Int & gt; :: इटरेटर यह = foo.begin (); जबकि (यह! = Foo.end ()) {if (// कुछ) {foo.push_back (// कुछ संख्या); } ++; }
क्या इसमें कोई समस्या है? सदिश का आकार बदलने के बाद, क्या लूप की स्थिति में foo.end () आगे बढ़ेगा 1?
पी.एस. इसके अलावा, यदि वेक्टर ने एक्स नंबर की संख्या ints के लिए आरक्षित किया था। अगर push_back ने इस स्थान का उल्लंघन नहीं किया है, तो क्या यह अभी भी एक मुद्दा होगा (मैं मान सकता हूँ कि यह if.end () एक वेक्टर में पिछले तत्व को पिछले एक बिंदु है जिसमें कुछ है)।
हां, इसके साथ कोई समस्या है।
push_back
पर कोई भी कॉल करने की क्षमता है सभी iterators को एक सदिश में अमान्य करने के लिए।
foo.end ()
हमेशा वैध अंत इटरेटर को पुनर्प्राप्त करेगा (जो कि पिछले मान से भिन्न हो सकता है foo.end ()
) द्वारा लौट आए, लेकिन यह
अमान्य हो गया हो सकता है इसका अर्थ यह है कि इसे बढ़ाना या इसकी तुलना करना अपरिभाषित व्यवहार के कारण हो सकता है।
Comments
Post a Comment