Vektor leeren



  • Hi zusammen,

    ich habe einen Vektor mit vordefinierter Länge, welcher zu Beginn mit Nullen gefüllt ist:

    vector <int> vec = (10, 0)
    

    Innerhalb einer For-Schleife verändern sich die Werte des Vektors an bestimmten Stellen und der Vektor wird anderweitig weggespeichert. Am Ende eines Schleifendurchlaufs möchte ich den Vektor leeren, so dass der nächste Schleifendurchlauf, den Vektor wieder von neuem "befüllen" kann.
    Benutze ich hierzu

    vec.clear()
    

    , so wird auch die Größe des Vektors gelöscht. Eine zusätzliche Schleife, welche alle Einträge des Vektors wieder auf Null setzt finde ich zu umständlich.
    Gibt es eine Möglichkeit, den Vektor schneller zu leeren ohne dabei die Größe des Vektors zu zerstören?

    Danke!



  • Size != Capacity.

    Size = Anzahl der Elemente im Vector
    Capacity = Anzahl der Elemente die addiert werden koennen bevor der Vector wieder wachsen muss.

    Edit:
    Mit anderen Worten ist die size = 0 (was ok wäre) oder ist die capacity = 0 nachdem du vector.clear()= aufrufst.



  • Wie soll denn der Vector leer sein, aber eine Größe haben? Entweder er ist leer oder es ist etwas drin.



  • Guckst du std::fill .



  • Calcio24 schrieb:

    Eine zusätzliche Schleife, welche alle Einträge des Vektors wieder auf Null setzt finde ich zu umständlich.

    std::fill( std::begin( vec ), std::end( vec ), 0 );
    


  • vec.clear(); 
    vec.resize(10);
    

    löst mein Problem 🙂



  • Calcio24 schrieb:

    vec.clear(); 
    vec.resize(10);
    

    löst mein Problem 🙂

    Das klingt nicht richtig.
    Es löst vielleicht dein Problem ist aber nach meiner Meinung nicht die richtige Herangehensweise.

    Wenn du bereits einen Algorithmus hast der deinen Vektor befüllt ruf clear() auf und starte dann deinen Algorithmus,wenn nicht dann benutze std::fill.

    Edited:
    Ich wuerde vielleicht auch vor std::fill clear aufrufen nur um im Code zu signalisieren, dass die "Transaktion" abgeschlossen ist.



  • Wenn sich die Größe nie ändert ist evtl. auch std::array (aus C++11) ein geeigneterer Container. Der bringt sogar ein fill() mit.

    #include <array>
    
    void f(){
      std::array<int, 10> vec;
      ....
      vec.fill(0);
    }
    


  • Ruvi schrieb:

    Ich wuerde vielleicht auch vor std::fill clear aufrufen nur um im Code zu signalisieren, dass die "Transaktion" abgeschlossen ist.

    Dann hast Du aber nix mehr zum fillen ...



  • Belli schrieb:

    Ruvi schrieb:

    Ich wuerde vielleicht auch vor std::fill clear aufrufen nur um im Code zu signalisieren, dass die "Transaktion" abgeschlossen ist.

    Dann hast Du aber nix mehr zum fillen ...

    Argh, du hast recht, my fault.



  • Einfach fill - wie von Swordfish vorgeschlagen - und eine Kommentarzeile davor, dürfte das einfachste und sinnvollste sein.


Anmelden zum Antworten