Array



  • Hallo,
    sorry wegen dieser blöden Frage, aber wie kann ich die Anzahl der Elemente in einem Array in c++ herausfinden? In Java gibt es array.length(...) aber in c++??
    Mit sizeof bekomme ich ja nur die Größe in Byte. Das möchte ich ja nicht, sondern nur die Anzahl der Element bzw. der Einträge.

    Ist eine sehr einfache Frage, bitte verzeiht mir.



  • Siehe dein Cross-Post in ANSI C...



  • Nimm std::vector, dann gibts auch eine entsprechende Methode...

    grüße



  • Danke dir. Probiere es mal aus.



  • Java VS. C++ schrieb:

    Hallo,
    ...
    Mit sizeof bekomme ich ja nur die Größe in Byte.
    ...

    Richtig. Aber du kannst doch mit der Größe des Arrays die Anzahl herausfinden.
    Du hast gegeben
    1)Die Größe des Arrays in byte
    2)Die Größe vom Typ in byte

    Wenn du nun einfach die Arraygröße durch die Typengröße teilst, erhälst du das ergebnis 🙂

    int Array[10];
        int Groesse;
    
        Groesse = sizeof(Array) / sizeof (int);
    
        cout << Groesse;
    

    Ist zwar umständlich, aber es funktioniert 😛



  • Weedjo schrieb:

    ...

    Groesse = sizeof(Array) / sizeof (int);
    

    ...

    Ich weiß aber nicht, ob das auch zuverlässig mit "nicht-PODs" ("plain old data") funktioniert....
    ich denke, vector ist eigentlich sowies das, was ein "Javaist" sucht, wenn er nach einem Array fragt. 😉

    Gruß,

    Simon2.



  • Ich denke auch, aber er hat das gerade mit dem sizeof() angesprochen, da kam mir das in den sinn 🙂



  • Simon2 schrieb:

    Weedjo schrieb:

    ...

    Groesse = sizeof(Array) / sizeof (int);
    

    ...

    Ich weiß aber nicht, ob das auch zuverlässig mit "nicht-PODs" ("plain old data") funktioniert....

    Doch das funktioniert zuverlässig.

    ich denke, vector ist eigentlich sowies das, was ein "Javaist" sucht, wenn er nach einem Array fragt. 😉

    Das ist allerdings richtig ;).

    Gruß, Caipi



  • sizeof(Array)/sizeof(Array[0])
    

    Funktioniert mit allen Klassen. Gottseidank 🙂



  • Plotzenhotz schrieb:

    sizeof(Array)/sizeof(Array[0])
    

    Funktioniert mit allen Klassen. Gottseidank 🙂

    Und bei dynamisch reservierten Speicher is Schluss...



  • Plotzenhotz schrieb:

    sizeof(Array)/sizeof(Array[0])
    

    Funktioniert mit allen Klassen. Gottseidank 🙂

    Aber nur wenn es in derselben Funktion benutzt wird,
    wo auch der array deklariert ist

    int len(int[] a) {
      return (int) sizeof(a) / sizeof(a[0]);
    }
    

    kann schon nicht mehr funktionieren, da sizeof keine Funktion
    im üblichen Sinn ist (sie steht nirgendwo im Kompilat) sondern
    nur zur Compilezeit existiert.

    BTW: Hab' gerade keinen C-Compiler zur Hand. Kann mir jemand sagen
    was meine oben gepostete Funktion beim Kompilieren für einen Fehler
    erzeugt?



  • Javaner schrieb:

    BTW: Hab' gerade keinen C-Compiler zur Hand. Kann mir jemand sagen
    was meine oben gepostete Funktion beim Kompilieren für einen Fehler
    erzeugt?

    Einen "tu weniger java machen tun"-Syntax-Fehler.

    size_t len(int a[]) {
      return sizeof(a) / sizeof(a[0]);
    }
    

    Und natuerlich nen logischen fehler, aber der war wohl beabsichtig


Anmelden zum Antworten