Brauche mal eben eine Erklärung



  • Also folgendes:

    Wenn ich jetzt push_back() einen Vektor erweitere und dann einen Iterator, welcher auf das erste Element des Vektors zeigt, nun inkrementiere, müsste der inkrementor ja eigentlich bei dereferenziert ja auf den neuen Wert des Vektors zeigen.
    Also ich erweitere den Vektor, inkrementiere dann den Iterator, und dereferenziere den Iterator dann.

    Das geht zwei mal gut, danach nicht mehr, weil mir dann Code::Blocks einen Schreibfehler ausspuckt.

    Wieso?
    Ich verstehe es einfach nicht.

    Danke schon mal für eure Antworten! 🙂

    JTR



  • Weil der Iterator beim resizen des vectors invalidiert wird, bzw. werden kann.
    Das kannst dir ganz einfach vorstellen, wenn das neue Element nicht mehr in den vector passt, wird neuer Speicher für alle Daten angelegt, die Daten kopiert, der alte Speicher freigegeben - dein Iterator zeigt auf ungültigen Speicher.
    Das muss aber nicht unbedingt so sein, weil ein vector beim Einfügen üblicherweise mehr Speicher reserviert, als gerade benötigt wird. Also, z.B. für vier Elemente statt für zwei. Deswegen kann das auch paar mal gutgehen. Ist aber UB.



  • This post is deleted!


  • Schau in die Dokumentation zu Push_back: https://en.cppreference.com/w/cpp/container/vector/push_back

    Zitat:

    If the new size() is greater than capacity() then all iterators and references (including the past-the-end iterator) are invalidated. Otherwise only the past-the-end iterator is invalidated.



  • This post is deleted!

Log in to reply