Größe eines "short" Arrays



  • Hallo!

    Ich erstelle ein Array (oder sagt man in diesem Fall Vector?) aus shorts.

    Das sieht so aus:

    int i=256;
    shorts=new short[i];

    Wie könnte ich denn (vorausgesetzt, ich wüsste nicht, dass shorts 255 Elemente hat), die Länge/Größe des Arrays/Vektors abfragen?

    int iSize=shorts.size();

    geht ja leider nicht, weil es keine Klasse ist.

    Und sizeof(shorts) gibt man nur die Länge einer "short"-Variablen zurück, aber ich möchte gerne die Anzahl der Elemente (255) wissen.

    Vielen Dank für die Hilfe!



  • Die Anzahl der Elemente steht doch in i. 😕



  • kannst du nicht, weil du nur nen zeiger auf den anfang des arrays hast.

    aber wieso nimmst du kein std::vector<short>? dann könntest du ganz bequem die größe heraus finden und musst dich nicht um die freigabe des arrays kümmern.



  • Ich denke das geht nicht, wenn du nur einen Zeiger auf das Array hast. Woher willst du mit einem Zeiger wissen, wie gross der Array-Block ist.

    Was geht ist folgendes (ist aber natuerlich nicht das selbe):

    short data[256];
    	cout << sizeof(data) / sizeof(short) << endl;
    


  • vario-500 schrieb:

    aber wieso nimmst du kein std::vector<short>? dann könntest du ganz bequem die größe heraus finden und musst dich nicht um die freigabe des arrays kümmern.

    👍
    Verstehe ich auch nicht. std::vector ist, was du möchtest. new braucht man in C++ im allgemeinen recht selten. (Mit make_unique gar nicht. ;))



  • icarus2 schrieb:

    Ich denke das geht nicht, wenn du nur einen Zeiger auf das Array hast. Woher willst du mit einem Zeiger wissen, wie gross der Array-Block ist.

    Was geht ist folgendes (ist aber natuerlich nicht das selbe):

    short data[256];
    	cout << sizeof(data) / sizeof(short) << endl;
    

    Blöd. Besser:

    short data[256];
    	cout << sizeof (data) / sizeof (*data) << '\n';
    

    Funktioniert nur bei "echten" Arrays.

    Edit³: egal.



  • Hacker schrieb:

    Blöd. Besser:

    short data[256];
    	cout << sizeof (data) / sizeof (*data) << '\n';
    

    Funktioniert nur bei "echten" Arrays.

    Auch blöd. Noch besser:

    std::array<short, 256> data;
      std::cout << data.size() << '\n';
    

    Einfach drauf verzichten, mit rohen C-Arrays rumzupfuschen 😉



  • pumuckl schrieb:

    Hacker schrieb:

    Blöd. Besser:

    short data[256];
    	cout << sizeof (data) / sizeof (*data) << '\n';
    

    Funktioniert nur bei "echten" Arrays.

    Auch blöd. Noch besser:

    std::array<short, 256> data;
      std::cout << data.size() << '\n';
    

    Einfach drauf verzichten, mit rohen C-Arrays rumzupfuschen 😉

    Nein! Du verstehst nicht. Ich meinte jetzt nur wegen der Methode für Rohe Arrays. Das man die überhaupt nicht benutzen soll, ist doch klar 😃

    Edit: Die Frage des TEs war aber nicht, was besser ist, pumuckl, also war deine Antwort eigentlich "Auch blöd".


Anmelden zum Antworten