Vector Assertion Error?



  • Hallo.

    Ich soll folgenden Snippet korrigieren:

    vector<int> iv (4,5);
    vector<int>::iterator mid = iv.begin() + iv.size()/2;
    
    while (vector<int>::iterator iter !=mid)
    if (*iter==some_val)
    iv.insert(iter, 2*someval)
    

    Meiner Meinung nach müsste das ja so sein:

    vector<int> iv (4,5);
    vector<int>::iterator iter=iv.begin();
    
    while (iter!=iv.begin()+iv.size()/2)
    if (*iter==2)
    iv.insert(iter, 2*2);
    ++iter;
    

    Dies mündet allerdings in einer Endlosschleife. Jedoch wurde auch schon eine Seite weiter hinten ein nahezu identischer Lösungsvorschlag gezeigt, jedoch auch eine Endlosschleife.

    Ist das nun gewollt oder nicht? Ich mein klar der Code bringt zwar keine Fehler,...



  • was macht insert? könnte es sein, daß dabei der iter kaputtgeht, also nicht mehr in den vector zeigt?
    vielleicht am besten, du verwendest int und [].



  • Das hast du davon, wenn du keine geschweiften Klammern setzt. ++iter ist nämlich nicht mehr innerhalb der Schleife.



  • Huch danke funzt. Man kann also keine zwei Kontrollstrukturen ohne geschweifte Klammern ineinander verschachteln?



  • Vark schrieb:

    Huch danke funzt. Man kann also keine zwei Kontrollstrukturen ohne geschweifte Klammern ineinander verschachteln?

    Doch, aber es wird nur die nächste Zeile ausgeführt.. Die übernähchste wird bereits wieder ausserhalb ausgeführt.



  • Nicht, wenn diese aus mehreren Anweisungen bestehen. Aber benutze bei verschachtelten Strukturen doch Klammern und rücke anständig ein. Das macht das Ganze nicht nur viel übersichtlicher, sondern beugt auch solchen Fehlern vor.


Anmelden zum Antworten