Array oder STL-Container?



  • Hallo Leute 🙂

    Muss für eine Anwendung ein Vector( im Sinn von Behälter, nicht der aus der STL ) für eigene Structs implementieren.
    Dieser wird nur zu begin einmal befüllt, bleibt also in der Grösse constant.
    In einer Endlosschlaufe muss ich in verschiedenenen Funktionen durch den Vector durchiterieren,
    also mehrmals pro Schlaufe, und Members prüfen oder ändern,
    und am Schluss jeder Schlaufe den Inhalt eines gleich grossen Containers in den ersten überkopieren (swap).
    Für diese statische Verwendung würde doch ein Array reichen
    oder wär es effizienter mit einem STL_Container (Wenn ja mit welchem).
    Mir wär höchstens aus Schönheitsgründen (Codewartung) ein STL_Container lieber, aber das ist zweitrangig.
    Es zählt erstmal nur Effizients.

    Für Antworten danke ich schonmal im Voraus.



  • Aus Effizienzgründen geben sich herkömmliche Arrays und std::vector nichts. Wie Du schon gesagt hast, ist die Wartbarkein aber bei einem std::vector besser, daher würde ich auf jeden Fall std::vector bevorzugen.

    (übrigens ist das eine Schleife und keine Schlaufe, die Du da programmierst 😉 )

    Tntnet



  • Effiziens ist so eine Sache... Wenn du deinen Container selbst codierst könntest du es vielleicht schaffen etwas schnelleres zu programmieren. Ich bezweifle jedoch, dass es effizient ist für ein paar Millisekunden Zeitersparnis anzufangen sich einen eigenen Container zu basteln.
    Da kann man die Zeit wirklich besser investieren.



  • Mathias schrieb:

    Effiziens ist so eine Sache... Wenn du deinen Container selbst codierst könntest du es vielleicht schaffen etwas schnelleres zu programmieren. Ich bezweifle jedoch, dass es effizient ist für ein paar Millisekunden Zeitersparnis anzufangen sich einen eigenen Container zu basteln.
    Da kann man die Zeit wirklich besser investieren.

    Vor allem bekommt das garantiert nicht jeder hin, wirklich einen schnelleren zu schreiben.



  • Aus Effizienzgründen geben sich herkömmliche Arrays und std::vector nichts.

    Naja, fast ^^

    Zur laufzeit nehmen sich nen statisches Array und nen std::vector nicht viel (vernachlaessigbar).

    Der unterschied ist die Erzeugung, da braucht der std::vector um laengen mehr (dynamische allocation) .... wenn man den allerdings nur einmal braucht / erzeugt ist das auch vernachlaessigbar.
    Der unterschied kommt nur, wenn du viel und oft (in ner schleife) von nem array (strings sind auch arrays ! ) vollstaendige Kopien anlegen musst. Dann ist das statische Array um laengen schneller.

    Denk mal im falle des threaderstellers isses pure Geschmackssache ... es sei den das array is von haus aus so gross, das es mit einigen Stackimplementationen von diversen BS (win 16 war da ganz eklig) kollidiert.

    ist die Wartbarkein aber bei einem std::vector besser

    wird ich so nicht pauschal sagen .... wenn man sich an die dinge haelt, die man mit nem noramalen array macht, wird das auch ned unuebersichtlicher ....
    die ganzen STL funktionen und operationen die man mit ausgepraegten iteratoren machen kann, funktionieren auch mit rohen Zeigern auf nen Array (weil sich nen iterator so auch verhaelt) ... von daher isses also auch eher geschmackssache ...

    Ciao ...



  • wird ich so nicht pauschal sagen .... wenn man sich an die dinge haelt, die man mit nem noramalen array macht, wird das auch ned unuebersichtlicher ....

    Das würde ich so nicht sagen... man wechselt durch den Einsatz von Arrays an der Stelle recht schnell die Programmiertechnik. Da meine Daten (Array) und in der anderen Ecke die Funktionen, die ich drauf loslasse.
    Wenn man da nicht gut aufpasst, bekommt man recht schnell eine willkührliche Mischung aus Objektoritenierten und Funktionalen Code....



  • Nimm nen boost::array, das ist ein normales Array (also 100% genauso effizient und speichersparend) mit 'ner schönen Schnittstelle.


Anmelden zum Antworten