speed von einem vector Array



  • Für nen Programm brauch ich nen relativ großes Array eines "structs" mit genau drei integer Variablen (Raumkoordinaten). Die Anzahl der benötigten Felder ist aber nicht fix, je nachdem was man so im Programm macht braucht man mehr oder weniger Punkte. Ich hab die Größe des Arrays von Anfang an aber trotzdem mal auf eine maximal Größe die eigentlich ausreicht (200.000 entspricht dann 200.000 * 3 *integergröße) fest eingestellt.
    Da ich auf diese Weise aber natürlich entweder zu wenig oder zu viel habe, wollte ich das ganze jetzt dynamischer mit nem vector machen. Je nach Bedarf werden weitere "structs" angehängt (ich schätze mal abhängen ist dann zu rechenintensiv). Das Array wird ungefähr 35mal in der Sekunde mit neuen Daten gefüllt (oder zB halt nur halb) und ausgelesen (ggf dann auch nur zur Hälfte).
    Nun würde ich gerne wissen, ob sich jetzt ein vector sehr in der geschwindigkeit bemerkt macht. Das anfügen neuer "structs" ist ja größtenteils nur in der Anfangsprogrammphase.
    Was meint ihr denn dazu?



  • Also ich würde sagen, dass vector sich nicht bemerkbar macht, denn es ist ja schließlich auch _nur_ ein Array, nur dass man halt die Größe / Anzahl der Elemente ändern kann.



  • und wie ist es, wenn ich den vector nicht nur erweiter sondern auch immer dem benötigten Punkten verkleiner? Ist eine solche Operation sehr aufwendig (wobei es eh nicht allzu sinnvoll ist, wenn ich drüber nachdenke)



  • ein Vector verhält sich doch so wie ein Array, oder?
    Dann muss man aber auch bedenken, dass wenn man z.B. einen Vector mit 200.000 Elementen hat und dann ein paar weitere angehängt werden, dass dann nicht genügend Platz am Ende des Arrays ist. (Wenn man sich den Heap vorstellt)
    Dann müsste sich der Vektor einen neuen größeren Platz auf dem Heap suchen, und dort die gesamten 200.000 alten Daten hinkopieren, oder?
    Das könnte langsam werden. (wenn es ungünstig läuft)



  • Nene, also ein Vector, wenn du bei dem die Größe veränderst, veränderst du auch die größe des reservierten Speicherplatzes.



  • vector<T> ist langsamer, als ein lokales statisches array.



  • beim iterieren nicht 😉



  • Das der langsammer ist habe ich nie bestritten... aber wie viel langsammer?



  • Miss nach. Wenn es keine zeitkritische Anwendung ist dürfte es nix ausmachen... 😉

    [ Dieser Beitrag wurde am 29.05.2003 um 17:19 Uhr von MaSTaH editiert. ]



  • Original erstellt von davie:
    beim iterieren nicht 😉

    Wieso? 😕



  • Original erstellt von MaSTaH:
    [quote]Original erstellt von davie:
    [qb]beim iterieren nicht 😉

    Wieso? 😕[/QB][/QUOTE]

    Wieso nicht? 😕



  • Weil beim inkrementieren von einer Zählervariablen (z.B.) ein einfaches inc gemacht wird. Beim inkrementieren eines Iterators wird aber erst der ++Operator der Iteratorklasse aufgerufen.

    EDIT: Oder sehe ich das falsch...?

    [ Dieser Beitrag wurde am 30.05.2003 um 13:03 Uhr von MaSTaH editiert. ]



  • ... welcher inline sein kann, so dass das im Endeffekt bei einem Vektor nur eine Pointerinkrementierung ist. Also ADD x, sizeof(T)


Anmelden zum Antworten