Problem Vector



  • Bekomme leider keine ausgaben der Daten, weiß nicht warum.
    Er soll den Vector ab pos 3 paarweise ausgeben:

    int it;
    for (it = 3; it == maindata.size(); ++it) {
    cout << maindata.at(it) <<endl;
    ++ it;
    cout << maindata.at(it) <<endl;  
    }
    


  • habe es

    for (it=maindata.begin()+3; it != maindata.end(); ++it) {
    cout << *it <<endl;
    ++ it;
    cout << *it <<endl;  
    }
    


  • it==maindata.size()
    

    wird nur war für den fall das it wirklich gleich maindata.size() ist.
    richtig:

    it!=maindata.size()
    

    Schreibfehler? 😉

    besser ist iteratoren zu verwenden.

    edit: genau so 🙂



  • Fencer schrieb:

    edit: genau so 🙂

    Nein, nicht genau so.

    Dieser Code

    for (it=maindata.begin()+3; it != maindata.end(); ++it) { 
    cout << *it <<endl; 
    ++ it; 
    cout << *it <<endl;   
    }
    

    ist unsicher, da du den Iterator zwei mal erhöhst, ohne zwischendurch die Schleifenbedingung zu prüfen. Ein end() -Iterator, der weiter inkrementiert wird, führt zu undefiniertem Verhalten. Vom anschliessenden Dereferenzieren ganz zu schweigen.

    Also schreibe einfach

    for (it=maindata.begin()+3; it != maindata.end(); ++it)
    { 
        cout << *it << endl; 
    }
    

    , ich sehe sowieso keinen Grund für die zweifache Ausgabe innerhalb des Schleifenrumpfes. Abgesehen davon musst du sicherstellen, dass maindata.begin()+3 immer ein gültiger Iterator ist, also genügend Elemente im Container vorhanden sind.



  • ah... stimmt. sorry 😞


Log in to reply