Array als Datenmember ohne die Grösse zu kennen !
-
Hallo,
im Prinzip brauche ich ein Array als Datenmember einer Klasse.
Die Größe dieses Arrays wird erst zur Laufzeit bekannt. Es ist
zwei Dimensional und hält float's und sollte in beiden Dimensionen
indizierbar sein.Gerade versuche ich es mit einem
std::vector<std::vector<float> >allerdings gibt es hier vielleicht jemanden der eine schönere Lösung für das Problem hat, ach ja effizient sollte es auch sein

Vielen Dank für eure Hilfe.
-
vector< vector<float> > ist schon relativ schön
Ansonsten kannst du glaube ich nur was selber basteln.. Oder was eindimensionales, wo du den Index halt selber ausrechnen musst:float* a = new float [ a * b ] int x = 5 int y = 10 a[y*b+x] = 10000000
-
würde auch sagen, dass die vector lösung schon sehr gut und auch sehr bequem ist, da du dich nicht mit der speicherverwaltung beschäftigen musst.
ein vector object ist benötigt jedoch etwas mehr speicher als ein pointer.
-
Badestrand schrieb:
vector< vector<float> > ist schon relativ schön
Ansonsten kannst du glaube ich nur was selber basteln.. Oder was eindimensionales, wo du den Index halt selber ausrechnen musst:float* a = new float [ a * b ] int x = 5 int y = 10 a[y*b+x] = 10000000(P.S.: Dein Array sollte nicht genauso heißen wie die Dimension, mit size_t liegt man besser als mit int und mit einem float-Literal auch besser als mit einem int-Literal
)... oder "best of both worlds":
vector<float> vec(a * b); // Alternativ: // vector<float> vec; // vec.resize(a*b); // Wenn a und b erst nach Erstellung von vec bekannt werden size_t x = 5 size_t y = 10 vec[y*b+x] = 100f;Gruß,
Simon2.
-
Hallo,
vielen Dank erstmal für eure Antworten.
Ich verstehe nicht wieso ihr das letzte Element auf 100f bzw. 10000000 setzt.
-
qbitus schrieb:
Ich verstehe nicht wieso ihr das letzte Element auf 100f bzw. 10000000 setzt.
Vermutlich ein rein willkürlicher Wert, um dir zu zeigen, wie der Zugriff funktionieren wird

-
AAaaahh Ok.
Naja, es ist ja auch noch früh am morgen
-
Also wenn ich mir das mal aufmale, dann sollte der Zugriff durch
vec[y*b+x+1]geschehen, sonst komme ich in die falsche Zelle.
Mein Index läuft ja bei NULL los.Falls ich doch noch einen Denkfehler drin habe dann helft mir doch
bitte auf die Sprünge.Dankeschön...
NACHTRAG:
Ne habs gerade gerafft die erste Zelle ist ja auch die Nullte

Also danke für eure Hilfe !