Container:Vector



  • Hi,
    habe da mal eine frage bezüglich vectoren.

    wenn ich in einem vectore mehrere elemente (egal von welchen datentyp) mit vector.push_back(element) abgelegt habe und dann mittels iteratoren den vector durchlaufe und nach einem element suchen lasse und danach dieses okjekt mittels vector.erase(zusuchendeselement) lösche, muss ich dann die iteratoren wieder neu initialieseren oder schafft der container es dann den vector noch weiter bzw von anfang an durchzulaufen ?

    hoffe ihr versteht was ich meine. wenn nicht muss ich mal nen code zusammenbasteln. hab den code nämlich momentan nur in einem komplexeren programm.

    danke schonmal für hilfreiche antworten



  • Ja, das ist so ein Ding...

    http://www.google.at/search?hl=de&q=c%2B%2B+reference+vector&meta=

    erase() ist so nett und gibt dir einen gültigen Iterator auf das nächste Element zurück.

    MfG



  • ok , also ich denke ich habe es verstanden. wenn ein element in mitten aus einem vector gelöscht wird, verschieben sich die hinteren objekte nach vorne und mit dem halt auch das ende des vector. würde man also dann den zeiger auf das ende nicht neu festlegen, würde das programm abstürzen. aus dem grund sollte man einen vector eher wie ein feld behandeln wie folgendes beispiel zeigt

    // erasing from vector
    #include <iostream>
    #include <vector>
    using namespace std;
    
    int main ()
    {
      unsigned int i;
      vector<unsigned int> myvector;
    
      // set some values (from 1 to 10)
      for (i=1; i<=10; i++) myvector.push_back(i);
    
      // erase the 6th element
      myvector.erase (myvector.begin()+5);
    
      // erase the first 3 elements:
      myvector.erase (myvector.begin(),myvector.begin()+3);
    
      cout << "myvector contains:";
      for (i=0; i<myvector.size(); i++)
        cout << " " << myvector[i];
      cout << endl;
    
      return 0;
    }
    

    oder hab ich da jetzt was falsch verstanden ? berichtigt mich wenn ich hier was falsches sage.



  • jontef schrieb:

    aus dem grund sollte man einen vector eher wie ein feld behandeln

    Vielleicht auch aus dem Grund, weil std::vector intern tatsächlich ein Array (Feld) verwaltet.

    Aber wie gesagt, wenn du durchiterierst (mit Iteratoren), kannst du den Rückgabewert von erase() verwenden, um zum nächsten gültigen Element zu kommen.


Anmelden zum Antworten