Vektor (Out of Range)



  • Hallöchen...

    ich habe einen Vektor vom Typ int und einen Timer. Wenn eine bestimmte Bedingung erfüllt ist, soll das erste Element von meinem Vektor gelöscht werden.

    Ich gehe das Programm mal durch:

    1. Wenn die Bedingung erfüllt ist, lösche erstes Element:

    if (vy.size() == laenge){
                    vy.erase(vy.begin());
            }
    

    2. Füge ein Element hinzu:

    y+=3;
            vy.push_back(y);
    

    3. Ausgabe des kompletten Vektors:

    for(int i=0; i<vx.size(); i++){
                    Memo1->Lines->Add(IntToStr(vy.at(i)));
            }
    

    Problem:
    Ich bekomme immer eine Out of Range Fehlermeldung, wenn die Bedingung von Schritt 1 erfüllt ist.

    Erläuterung:
    Ich habe eine variable Maximallänge. Wenn diese erreicht wird, soll das erste Element entfernt werden und alle folgenden aufrücken (Element 1 wird also zu Element 0; Element 2 wird also zu Element 1; Element 3 wird zu Element 2, usw.)

    Was mache ich falsch? Habt ihr einen kleinen Denkanstoß für mich?

    Danke im Voraus! 🙂



  • Psychedelixx schrieb:

    Ich habe eine variable Maximallänge.

    Kann diese variable Maximallänge zufällig auch 0 werden?



  • Denkanstoß: Debugger benutzen und gucken ob überhaupt was drin ist in vy.
    Vorschlag: Mal über deque nachdenken.



  • CSpille schrieb:

    Kann diese variable Maximallänge zufällig auch 0 werden?

    nein, die ist immer >= 10 (also die Variable "laenge")

    @brotbernd: ich versuchs mal, und sehe mir deinen Vorschlag mal an.

    Weitere Ideen und Vorschläge sind gern gesehen 🙂 (danke euch beiden so weit)



  • gerade noch was gesehen:

    for(int i=0; i<vx.size(); i++){
                    Memo1->Lines->Add(IntToStr(vy.at(i)));
            }
    

    vx.size() > vy.size => out of bounds



  • 😡

    ich sollte mal die Augen auf machen... danke, läuft jetzt.



  • Psychedelixx schrieb:

    3. Ausgabe des kompletten Vektors:

    for(int i=0; i<vx.size(); i++){
                    Memo1->Lines->Add(IntToStr(vy.at(i)));
            }
    

    Nur noch eine Kleinigkeit bezüglich Stil:

    Zum Iterieren existiert ein Iterator 😉

    for(std::vector<int>::const_iterator it = vec.begin(); it!=vec.end(); ++it){
                    Memo1->Lines->Add(IntToStr(*it));
            }
    

Anmelden zum Antworten