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".