vector vs. eingebautes array



  • finix schrieb:

    Ingo schrieb:

    aber ein vector hat riesigen Overhead.

    Ja? Das hört sich interessant an. Wärest du so nett deine Messungen mal zu posten?

    Was gibt es da zu messen? Der vector hat mehr Speicher reserviert als du brauchst => Speicherverschwendung.



  • Ben04 schrieb:

    finix schrieb:

    Ingo schrieb:

    aber ein vector hat riesigen Overhead.

    Ja? Das hört sich interessant an. Wärest du so nett deine Messungen mal zu posten?

    Was gibt es da zu messen? Der vector hat mehr Speicher reserviert als du brauchst => Speicherverschwendung.

    Ja? Wird ja ständig interessanter. Würde trotzdem fast vermuten dass du mit einem Array IMMER den maximal benötigten Speicher reserviert hast. Mit dem vector nicht. Und da der maximal benötigte Speicher bekannt ist wirst du auch mit dem vector nicht mehr Speicher reserviert haben als du brauchst.



  • Wird höchste Zeit den Hauptspeicher von 640 KB auf 2MB aufzurüsten. 😃 😃 😃



  • string Werte[24]; // macht gleich 24 strings in den Speicher
    vector<string> werte; // macht das nicht.
    


  • vector<string> werte(24); // macht das
    


  • Ich sach doch, es gibt keinen Grund vector nicht zu benutzen. Aber wenn ihr gerne für diese Erkenntnis lieber über eine Seite diskutieren wollt, bitte. :p



  • Chew-Z schrieb:

    Wird höchste Zeit den Hauptspeicher von 640 KB auf 2MB aufzurüsten. 😃 😃 😃

    Blödsinn, mehr als 640K braucht doch niemand.



  • Artchi schrieb:

    std::vector ist IMMER dem C-Array vorzuziehen! Es gibt keinen Grund vector nicht zu benutzen.

    falsch.



  • volkard schrieb:

    Artchi schrieb:

    std::vector ist IMMER dem C-Array vorzuziehen! Es gibt keinen Grund vector nicht zu benutzen.

    falsch.

    sehe ich auch so. vector benutzt doch den heap ne? wenn man das nicht will ist vector nicht das richtige



  • net schrieb:

    volkard schrieb:

    Artchi schrieb:

    std::vector ist IMMER dem C-Array vorzuziehen! Es gibt keinen Grund vector nicht zu benutzen.

    falsch.

    sehe ich auch so. vector benutzt doch den heap ne? wenn man das nicht will ist vector nicht das richtige

    Naja, das hat damit wohl aber nix zu tun. Wenn die Arraygröße defintiv feststeht, und sich auch nich ändern wird (sofern man das absehen kann) spricht natürlich auch nichts dagegen, ein normales Array zu benutzen.



  • Naja, das hat damit wohl aber nix zu tun. Wenn die Arraygröße defintiv feststeht, und sich auch nich ändern wird (sofern man das absehen kann) spricht natürlich auch nichts dagegen, ein normales Array zu benutzen.

    Wer gerne die Indexprüfung des vectors nutzen will, wird wohl kein Array
    nutzen, auch "wenn sich nicht ändern wird". 😉



  • net schrieb:

    volkard schrieb:

    Artchi schrieb:

    std::vector ist IMMER dem C-Array vorzuziehen! Es gibt keinen Grund vector nicht zu benutzen.

    falsch.

    sehe ich auch so. vector benutzt doch den heap ne? wenn man das nicht will ist vector nicht das richtige

    Es gibt afaik die Möglichkeit, sich seinen eigenen Allokator zu schreiben. Aber wer macht das schon?
    Ansonsten sehe ich es ähnlich. Pauschal zu sagen, dass std::vector immer vorzuziehen ist, ist imo falsch. std::vector ist nunmal mehr als nur ein simples Array, und diese erweiterte Funktionalität ist nicht immer erwünscht.
    Ich würde eher sagen, dass man sowas wie boost::array einem built-in Array vorziehen sollte.



  • Anders ist es vielleicht treffender formuliert. Es gibt IMHO niemals irgendeinen Grund, ein rohes C-Array zu verwenden. C-Arrays sind eines der lamesten und schlechtesten und hässlichsten Sachen, die ich überhaupt kenne.
    Wenn man sich wirklich gegen nen std::vector entscheidet, sollte man wenigstens statt nem C-Array boost::array nehmen.



  • Optimizer boost::array bringt doch kaum Vorteile. Noch nicht mal ein Range-Check im operator[]. boost::array hat nur Vorteile wenn man Arrays zusammen mit anderen STL Sachen benutzen will.



  • Kaum Vorteile??

    - Iteratoren
    - Die Möglichkeit, nen Indexcheck selber einzubauen
    - kann man schöner als Referenz übergeben
    - kannst size abfragen.

    Und keine Nachteile.



  • Und keine Nachteile.

    Doch. Abhängigkeit von Boost.



  • Nimmst du Quelltext, machen du strg + a, c, v und haben keine Abhängigkeit von boost.



  • 😃 👍
    Manche Leute denken echt zu kompliziert.



  • finix schrieb:

    Ben04 schrieb:

    finix schrieb:

    Ingo schrieb:

    aber ein vector hat riesigen Overhead.

    Ja? Das hört sich interessant an. Wärest du so nett deine Messungen mal zu posten?

    Was gibt es da zu messen? Der vector hat mehr Speicher reserviert als du brauchst => Speicherverschwendung.

    Ja? Wird ja ständig interessanter. Würde trotzdem fast vermuten dass du mit einem Array IMMER den maximal benötigten Speicher reserviert hast. Mit dem vector nicht. Und da der maximal benötigte Speicher bekannt ist wirst du auch mit dem vector nicht mehr Speicher reserviert haben als du brauchst.

    vector fordert IMMER mehr Speicher an denn der vector gross ist um zu verhindern, dass das Array neu angelegt werden muss wenn man nur ein Element am Ende anhängt. Ein C-array hingegen ist immer genau so groß wie man gefordert hat



  • Dann rüste mal endlich deinen Hauptspeicher von 640 KByte auf auf ein paar MByte auf. Ist heute nämlich ganz preiswert.

    Was verbraucht denn vector so? Es reserviert ja nicht 1 MByte an, sondern je nach Implementierung unterschiedlich. vector von VC++7.1 reserviert zu Anfang garnichts. Wenn ich vier push_back() mache, hat er nur 4 (vier!) Felder reserviert. Mache ich ein reserve(100) hat er tatsächlich 100 Felder belegt. Also genau das, was ich auch mit einem C-Array machen würde. Könnt ihr mit capacity() abfragen.

    Aber mir egal... macht doch was ihr wollt. 😃


Anmelden zum Antworten