Problem mit iter und Vektor bei hinzufügen von Elementen
-
Hallo,
ich bin ein C++ Neuling und möchte ein Programm
schreiben welches dynamische Elemente in einen Vektor vec1 einliest,
der zuvor schon Elemente erhalten hat und zwar mit Hilfe eines
anderen Vektors vec2. Wobei ich nicht weiß ob man das besser machen kann =
Frage. Problem ist nämlich, dass iter1 von vec1 dabei seine Bedeutung verliert,
also Speicherzugriffsfehler.In 'Pseudocode' folgende Idee:
vec1
vec2Init (vec1) // initialisiere vec1 mit irgendwas for (alle Elemente in vec1) if(Bedingung wahr) Function_fill_(vec2) // belade vec2 mit irgendwas vec1.push_back(alle Elemente in vec2) // dabei verliert der iter von vec1 seine Bedeutung // -> ProblemEs soll für jedes Element aus vec1 Werte des Vektors vec2
unter bestimmten Voraussetzungen an vec1 drangefügt werden.
D.h. sie sollen dann auch in der gleichen for-Schleife wieder
berbeitet werden:for (alle Elemente in vec1 + neue Elemente aus vec2) if(Bedingung wahr) Function_fill_(vec2) // belade vec2 mit irgendwas vec1.push_back(alle Elemente in vec2) // dabei verliert der iter von vec1 seine Bedeutung // -> Problemfor(vector<int>::iterator iter1 = vec1.begin(); iter1 != vec1.end(); iter1++) { Function_fill_up(&vec2); for(vector<int>::iterator iter2 = vec2.begin(); iter2 != vec2.end(); iter2++) { //neue Werte in vec1 füllen, sollen erneut in Fkt. //Function_fill_up(&vec2); untersucht werden vec1.push_back(*iter2); } Clean(vec2);//löschen der Werte }Hat irgend jemand Tipps ?
Danke im Voraus,
fooboo
-
Benutze anstatt eines Iterators einen Zählindex, um dein Problem auf die schnelle Art und Weise zu lösen.
Und überdenke vielleicht noch einmal deinen Algorithmus. Das kommt mir alles ziemlich merkwürdig vor.
-
Hi,
Problem ist, es ist nicht mein Algorithmus sondern
ein bestimmter Suchalgorithmus, welcher so funktioniert.Es müssen auf jeden Fall die Elemente welche aus dem 2. Vektor kommen
mit in die obere schleife übernommen werden und dann nochmals untersucht werden
je nachdem ob sie bestimmte Eigenschaften haben.Werde es mal mit dem Zählindex versuchen.
-
eine andere Lösung wäre, den 'vec1' durch eine Liste zu ersetzen. Die std::list ist wie vector ein sequentieller Container, deren Iteratoren aber beim Einfügen von weiteren Elementen ihre Bedeutung nicht verlieren.
Etwa so:
list< int > vec1; vec1.push_back( 27 ); // irgendwie mit Elementen füllen for( list<int>::iterator iter1 = vec1.begin(); iter1 != vec1.end(); ++iter1 ) { // if( bedingung als Funktion von *iter1 ) ... vector< int > vec2; // besser lokal anlegen, so entfällt das Clean! Function_fill_up(&vec2); copy( vec2.begin(), vec2.end(), back_inserter( vec1 ) ); // eleganter mit copy; geht mit vector und list; erfodert #include <iterator> }Gruß
Werner
-
Hallo,
vielen Dank! Werde ich morgen gleich versuchen hört sich
nach dem an, was ich suche.Edit: Übrigens sehr gut erläutert, auch mit den Kommentaren.
Gruß,
fooboo