Größe/Länge des dynamischen Vektors erhalten?
-
Grüße!
struct Vertex { float x, y, z; }; Vertex* vertex; vertex = new Vertex[46]; // ... Befüllen ...Wie komme ich nun auf die Zahl 46?
Kann man das auch ausrechnen, wenn das array leer ist? Also wieviel Kapazität der Vektor hätte?MfG
-
es handelt sich um ein normales array. es gibt keinen weg die größe des arrays herauszufinden. zumindest keinen sauberen und portablen. afaik legen die meisten implementierungen die größe eines blockes vor dem blockbeginn ab und natürlich gibt es da sicher einige hacks wie man z.b. unter windows dran kommt.
aber am besten merkst du dir einfach (in einer variable), wie groß der block ist und alle deine probleme sind aus der welt...
-
Jo, aber ich wollte mir eben diese Variable sparen. Nun, wie sähe denn dieser Weg aus bzw. welche gibt es?
MfG
-
ceplusplus schrieb:
Nun, wie sähe denn dieser Weg aus bzw. welche gibt es?
-> std::vector
-
das wäre sicher zu favourisieren, wobei das intern auch nix andres macht, als sich die größe zu merken

-
Das wäre doch Schwachsinn... Dann müsste ich zuerst noch eine temporäre Variable anlegen, diese befüllen und dann "back pushen".
MfG
-
...oder dem vertex einen vernünftigen konstruktor geben und es so machen:
vertices.push_back(vertex(x, y, z));
-
Was willst du denn sonst machen?!
Wenn du den Vektor vorbelegen willst, kannst du auch einen der anderen Konstruktoren benutzen, z.B.:std::vector<Vertex> Vertices (46);Jetzt hast du 46 Elemente, die standardkonstruiert wurden (wobei ich mir jetzt nicht sicher bin, was das für PODs heißt, ich glaube x,y,z sind dann undefiniert). Reinschreiben kannst du jetzt genauso wie mit dem Array.