Vector geeigneter als konstanter Array?



  • Hi.
    Ich bin gerade darüber am grübeln, ob es schlauer wäre, einen konstanten Array zu verwenden anstatt eines Vectors. Zur Situation:
    - Ich weiß, dass der Vector maximal 64 Einträge haben muss
    - Ich weiß, dass es aber auch nur 2 sein könnten
    - Die Werte und Länge des Vectors/Arrays ändern sich mehrmals in der Sekunde

    Was ist nun "schneller" bzw. Performance schonender? Wenn der Array eine konstante Größe hat, kann es ja sein, dass der Overhead unnötig groß wird. Allerdings bin ich im unklaren darüber, wie es da beim Vector aussieht.

    Danke 🙂



  • konstantes Array würde ich definitiv nicht verwenden, da du dich mit dem Speicher selber rumschlagen musst.

    Vielleicht ist ja boost::array was für dich.

    Wenn sich die Grpße jedoch immer ändert, dann ist wohl vector besser geeignet. Oder du nimmst eben ein festes Array von 64 einträgen und merkst dir, wie voll es ist. Ich denke aber auch, dass es kaum einen Unterschied macht, welchen container du nun wirklcih verwendest.



  • theliquidwave schrieb:

    - Die Werte und Länge des Vectors/Arrays ändern sich mehrmals in der Sekunde

    mehrmals? 2 oder 20000000000000 mal?

    ansonsten vlt auch list oder sowas. was willst du wirklich machen?



  • Für sowas, nämlich maximal 64 Einträge, habe ich meine Klasse Vector, der ich auch unterschubsen kann, daß sie ausnahmesweise mal eine fixe maximalgröße (64) hat.

    Die Werte und Länge des Vectors/Arrays ändern sich mehrmals in der Sekunde

    Also überlegenswert wird es erst ab Dutzenden von Millionen mal pro Sekunde. Und dann, sind es wenige Arrays, die lange leben und immer wachsen und schrumpen? Dann brauchst Du gar bichts zu tun, da ist std::vector schlau. Oder erzeugst Du andauernd neue Vectoren, dann könnte es überlegenswert sein, am new/delete des vectors zu sparen.



  • Also dann würde ich einfach einen vector<> nehmen und diesen mittels reserve() Speicherplatz vorallozieren lassen, so daß dann intern nicht immer wieder Speicher beim Hinzufügen von Elementen neu alloziert werden muß:

    std::vector<X> v;
    v.reserve(64);
    


  • Th69 schrieb:

    Also dann würde ich einfach einen vector<> nehmen und diesen mittels reserve() Speicherplatz vorallozieren lassen, so daß dann intern nicht immer wieder Speicher beim Hinzufügen von Elementen neu alloziert werden muß:

    std::vector<X> v;
    v.reserve(64);
    

    Oder

    std::vector<X> u(64);
    


  • Nein, das ist nicht das selbe!

    Bei reserve() bleibt size() auf 0, während bei dem Konstruktor x Default-Elemente erzeugt werden, d.h. size() == x.



  • Wird das beim beenden wieder freigegeben ?



  • ja



  • Merci.
    Das mit dem reserve() ist genau das, was ich gesucht habe 🙂
    Nein, mehrere Millionen male sind es dann doch nicht, vllt so 100 bis 300 mal pro Sekunde (abweichend).

    Danke und Gruß 🙂


Anmelden zum Antworten