Arraylänge bestimmen (double)



  • Code-Hacker schrieb:

    Hi!

    Weiß zwar nicht ob es das ist was du meinst, aber die Anzahl Elemente kannst du so bestimmen:

    sizeof(array)/sizeof(array[0]);
    // oder
    sizeof(array)/sizeof(TypVonArray);
    

    Code-Hacker

    Nur bei statischen Arrays. Hier geht es aber um dyn. allokierten Speicher.



  • Wie wär's mit std::vector statt dem dynamischen Array? Da kannste auch die Größe abfragen.

    MfG Jester



  • Jester schrieb:

    Wie wär's mit std::vector statt dem dynamischen Array? Da kannste auch die Größe abfragen.

    MfG Jester

    Ja. Zur Not würde es ja auch sowas tun:

    struct array {
       double* value;
       unsigned int size;
    };
    


  • Stimmt, ist aber unschön zu benutzen. Und bis man dann den op[] noch implementiert hat ist man mit dem vector doch wieder einfacher gefahren.



  • Hi,

    Jester schrieb:

    Wie wär's mit std::vector statt dem dynamischen Array? Da kannste auch die Größe abfragen.

    Hab einen Vector zum Aufbau der Daten verwendet, aus performancegründen (echtzeitregelung) hab ich das aber vor Meßbegin in ein Array kopiert.

    Hab jetzt einfach eine Variable die die Größe enthält beim erzeugen mit angelegt.

    Danke für eure Hilf!!!
    Gruß
    Threaddy



  • Threaddy schrieb:

    aus performancegründen (echtzeitregelung) hab ich das aber vor Meßbegin in ein Array kopiert.

    Nur auf verdacht oder gemessen/probiert? Ein vector dürfte nämlich beim Lesen/Schreiben nicht langsamer sein als ein gewöhnliches Array. Nur beim vergößern etc. ist natürlich Overhead dabei.

    MfG Jester



  • Naja, im Vergleich zum bei-jedem-push_back-das-Array-neu-allokieren-und-kopieren ist Overhead vielleicht übertrieben... 😉



  • Das stimmt zwar, aber wir wollen ja bei der Wahrheit bleiben. Und umsonst ist das Vergößern bei vector ja auch nicht.



  • Hi,

    Jester schrieb:

    Nur auf verdacht oder gemessen/probiert? Ein vector dürfte nämlich beim Lesen/Schreiben nicht langsamer sein als ein gewöhnliches Array. Nur beim vergößern etc. ist natürlich Overhead dabei.

    Hab ich schon länger mal probiert. Wenn der Vector mal in den 4Stelligen Bereich geht merkste das schon deutlich (also beim schreiben).

    Is des vector.at(x) net n Aufruf (hws. inline)

    Gruß
    Threaddy



  • Threaddy schrieb:

    Is des vector.at(x) net n Aufruf (hws. inline)

    du solltes schon op[] benutzen weil at den index zusätzlich prüft. und wenn du speed test machts dann nie mit der debug version es kann nämlich gut sein das in der debug version zusätlicher code in op[] eingebaut wird um prüfungen vorzunähmen



  • Gerard schrieb:

    vorzunähmen

    LOL



  • Threaddy schrieb:

    double *test=new double[x];
    

    Wie bestimme ich die Größe wenn x nicht bekannt ist (muß doch irgendwie gehn)?

    wenn du z.b. an die funktionen der heap-verwaltung ran kommst, könnte das gehen. der speicher vor der adresse, auf die *test zeigt, enthält eine struktur, die den heap-block beschreibt (wo u.a. auch die länge steht).

    btw: du könntest es selber finden, indem du mehrere 'char* x' 'mallocst' oder 'newst' und dir dann den speicher davor anschaust (x[-1] ... x[-n]).
    aber vorsicht - was dabei herauskommt ist natürlich in höchstem maße systemabhängig.



  • wenn du z.b. an die funktionen der heap-verwaltung ran kommst, könnte das gehen. der speicher vor der adresse, auf die *test zeigt, enthält eine struktur, die den heap-block beschreibt (wo u.a. auch die länge steht).

    Das mag auf einigen Compilern so sein, aber ich wuerde mich nicht darauf verlassen
    dass das alle so machen.

    Hab ich schon länger mal probiert. Wenn der Vector mal in den 4Stelligen Bereich geht merkste das schon deutlich (also beim schreiben).

    Das kann ich mir beim Schreiben gar nicht vorstellen, hoechstens, wenn die
    Kapazitaet nicht mehr ausreicht und der ganze Kram umkopiert werden muss.

    mfg
    v R



  • virtuell Realisticer schrieb:

    hoechstens, wenn die Kapazitaet nicht mehr ausreicht und der ganze Kram umkopiert werden muss.

    Das wiederum kann ein C-Array aber auch nicht schneller. Natürlich wird das irgendwann man langsamer (Cache etc.) aber ich sehe keinen Grund, warum es langsamer sein sollte als ein C-Array.

    MfG Jester


Anmelden zum Antworten