मैंने यह छोटा कोड लिखा है कि यह देखने के लिए कि वास्तव में एक इटरेटर वास्तव में कैसे अमान्य हो जाता है और इसकी क्षमता के बाद वेक्टर के बदले स्थान को इंगित नहीं करता है।क्षमता के पहुंचने के बाद वेक्टर में सम्मिलन कब किया जाता है जब सी ++ इटरेटर का ख्याल नहीं रखता है?
यहां वेक्टर और क्षमता का आकार प्रारंभ में 5 है। इसके बाद मैंने वेक्टर में कुछ अन्य तत्व डाले और myvector.begin()
पर इंगित करने के लिए मेरे इटरेटर को दोबारा शुरू नहीं किया। यह के बाद मेरे आउटपुट में 49
के जंक वैल्यू का कारण बनता है जब वेक्टर के तत्वों को फिर से प्रिंट करते हैं।
मेरा सवाल यह है कि सी ++ सभी तत्वों को नए स्थान पर कॉपी करने के बाद एक वैध myvector.begin()
पर फिर से इशारा करने वाला नहीं बनाता है?
इससे कुछ व्यवहार भी हो सकते हैं जो डीबग करना मुश्किल हो सकता है। मुझे काम करने का एक सुरक्षित तरीका पता है कि इसे इस्तेमाल करने से पहले हमेशा इटेटरेटर को फिर से शुरू करना होगा।
#include<iostream>
#include<vector>
#include<stdio.h>
using namespace std;
int main()
{
vector<int> myvector;
vector<int>::iterator it;
int myarray[]= {100,200,300,400};
myvector.insert(it,500);
it=myvector.begin();
myvector.insert(it,myarray,myarray+4);
it=myvector.begin();
for(;it!=myvector.end();++it)
cout <<*it<<endl;
cout <<"size of vector is :" << myvector.size() <<"\n";
cout <<"capacity of vector is : " << myvector.capacity()<<"\n";
cout <<"maximum size of vector is : " << myvector.max_size()<<"\n";
myvector.push_back(600);
for(;it!=myvector.end();++it)
cout <<*it<<endl;
}
Output of program :-
100
200
300
400
500
size of vector is :5
capacity of vector is : 5
maximum size of vector is : 1073741823
49
100
200
300
400
500
600
['std :: vector' के साथ जो आकार बदलता है, पिछले इटरेटर को अमान्य करता है] (http://stackoverflow.com/a/6438087/168175) – Flexo
@ वाउडलैंड वह जानता है कि, मुझे लगता है कि वह पूछ रहा है * क्यों * यह हो रहा है। –
प्रत्येक एसटीएल कंटेनर अपने इटरेटर की वैधता के संबंध में कुछ गारंटी देता है। यह समझने का भुगतान करता है कि किसी दिए गए कंटेनर के लिए इटरेटर्स को अमान्य कर दिया जाता है। आप निश्चित रूप से हमेशा एक नए 'शुरू() '' बस 'मामले में रीसेट नहीं करना चाहते हैं। जानकारी पुनः 'वेक्टर' के लिए यहां देखें - http://www.sgi.com/tech/stl/Vector.html –