Ich möchte einen Vektor von Iteratoren verwenden, um mit dem Inhalt eines Vektors < int> zu verknüpfen.
Wenn ich versuche, diesen Vektor von Iteratoren über einen einzigen Iterator "it" zu füllen, erhalte ich einen Segmentierungsfehler, wenn ich versuche, ihn zu dereferenzieren.Segmentierungsfehler beim Dereferenzieren von Vektor von Iteratoren
vector <int> vec;
vector <int>::iterator it = vec.begin();
vector<vector <int>::iterator> vecIt(3);
vec.push_back(1);
vec.push_back(2);
vec.push_back(3);
vecIt[0] = it;
cout << *vecIt[0] << endl; //this line causes seg. fault
Allerdings, wenn ich meinen „es“ nicht Iterator verwenden, funktioniert es ganz gut:
vector <int> vec;
vector<vector <int>::iterator> vecIt(3);
vec.push_back(1);
vec.push_back(2);
vec.push_back(3);
vecIt[0] = vec.begin();
cout << *vecIt[0] << endl;
Könnte jemand dieses Verhalten mir das erklären? Was verursacht das seg. Fehler bei Verwendung eines zusätzlichen Iterators?
Gibt es auch eine bessere Möglichkeit, durch meinen Vektor < int> zu gehen und Iteratoren (oder Zeiger, wenn das ratsam ist) für den Vektor von Iteratoren zu speichern?
Du afoul der [Iterator Validierungsregeln] (http://stackoverflow.com/questions/6438086/iterator-invalidation-rules) – NathanOliver
Sie entkräften die Iteratoren, wenn Sie 'push_back' läuft. –
Danke für den Link @NathanOliver! – hsvar