Grösse eines Arrays dynamisch erzeugen
-
GPC schrieb:
cpp]
std::vector< std::vector<float> > matrix;
[/cpp]Gelogen
Die Einzel-Vektoren müssen nicht gleich lang sein
Wenn dann ein Vektor mit Slices. Ist auch hyperschnell im Gegensatz zu vector<vector> > 
Ging mir ja auch nur darum, das Pointer-Zeug richtig zu zeigen und nicht um die 'beste' Lösung.
-
7H3 N4C3R schrieb:
GPC schrieb:
std::vector< std::vector<float> > matrix;Gelogen
Die Einzel-Vektoren müssen nicht gleich lang sein
Wenn dann ein Vektor mit Slices. Ist auch hyperschnell im Gegensatz zu vector<vector> > 
Stimmt, aber man kann ja ne Matrix-Klasse schreiben die obiges Konstrukt wrappt, dann hat man Vektoren gleicher Länge.
7H3 N4C3R schrieb:
Ging mir ja auch nur darum, das Pointer-Zeug richtig zu zeigen und nicht um die 'beste' Lösung.
Logo, allerdings vermeide ich Pointer, zieht meistens Fehler nach sich.
Btw. Deinen Namen zu quoten macht keinen Spass

-
Oh mann das Zweidimensionale ist echt tricky. was zum denken

Warum muss ich eigentlich das Array dann löschen?
Wenn ich es in einer Funktion drinn habe löscht es doch automatisch oder? Hätte gedacht dass beim Ende des Programmes alle automatisch gelöscht werden.
-
Speicher den du mit new auf dem Heap anforderst wird erst dann gelöscht wenn du (!) delete aufrufst. Klar ein modernes OS gibt den Speicher nach dem Programm wieder frei, aber man kann sich nicht darauf verlassen! Außerdem passiert das eben erst beim beenden, d.h. du hättest während dem gesamten Programm ein tolles Speicherleak.
-
Ok da ist was drann an der Speicher Sache muss ich mir gleich angewöhnen zu berücksichtigen. bei de ersten Lösung von 7H3 N4C3R ist wirklich ein Fehler in der Zeile
float** f = new (float*)[dim1]; // glaube das ist so richtig, aber keine GarantieHab nicht so viel Plan um den zu beheben und bei die zweite Lösung
verstehe ich leider nicht so richtig. Matrix ist dann wohl der Name, woher, weiß er wie gross das ganze und gehe ich dann damit wie bei einen Array um?
? A Am liebsten wäre es mir wenn die von 7H3 N4C3R irgendwie gehen würde
-
Notfalls mitm Typedef. Die Syntax an der Stelle hab ich noch nie gebraucht.
size_t dim1 = 10, dim2 = 20; typedef float* float_pointer; float** f = new float_pointer[dim1]; for( size_t i = 0; i < dim1; ++i) { f[i] = new float[dim2]; }
-
also sieht hammer schwer aus aber es klappt, echt geil ,danke

-
@The Nacer und Oliver1980:
just by the way: ein typedef ist hier nicht nötig. Nur dürfen keine Klammern hin. Also:float** f = new float*[dim1]; // keine Klammern um float*.Caipi
-
Es gibt in der FAQ nen super Artikel dazu und ihr schreibt hier über 2Seiten die gleichen Erklärungen ab wie dort drin stehen.
-
7H3 N4C3R schrieb:
Gelogen
Die Einzel-Vektoren müssen nicht gleich lang sein 
Müssen sie bei der **-Lösung auch nicht. Nur, dass die vector-Lösung natürlich wesentlich komfortabler und sicherer ist, aber das wird der OP vielleicht irgendwann beim Debuggen auch rausfinden.
-
An den unregistrierten Herrn Dreipunkt: Poste doch gleich den Link dazu, wenn Du das schon erwähnst...

http://www.c-plusplus.net/forum/viewtopic-var-t-is-39489.html@operator void: Weiß ich doch
Ich hab's nur nicht Matrix genannt 
@Caipi: Naaaaiiiin, bitte nicht The Nacer