vector insert in einer Schleife. Iterator ungültig?



  • Hallo,

    ich möchte nach einer Abfrage Daten in einer for Schleife in einen vector füllen:

    vector<MyClass>::iterator i = myvec.begin();
    
    for(; i != myvec.end() ; i++ )
    {
      if( (*i).pos > test )
      {
        vec.insert( i , foobar );
        break;
      }
    }
    

    Die einzelnen Objekte sind nicht interessant. Ich frage mich was mit dem Iterator nach dem insert Befehl passiert?! Wird er ungültig? Wenn ja (das vermute ich) gibt es für so etwas eine Lösung?


  • Mod

    Einfügen wenn die Größe danach größer wird als die capacity vorher war macht den Iterator(und alle anderem zu diesem vector) ungültig. Hier böte es sich als einfache Abhilfe an, mit Indizes anstatt mit Iteratoren zu arbeiten.



  • Du könntest den Vector nach dem insert nur wieder auf begin() setzen.


  • Mod

    jkljkl schrieb:

    Du könntest den Vector nach dem insert nur wieder auf begin() setzen.

    Dann macht das Programm aber was anderes als jetzt. Unter anderem bricht es nicht mehr ab.



  • Die Überladung von insert, die du verwendest, gibt einen Iterator auf das hinzugefügte Objekt zurück.


Log in to reply