Vector in Array umwandeln
-
sagenwoller schrieb:
Bitte verwende nicht
&*vec.begin()
oder&vec[0]
, da das nicht geht, wenn dein Vektor leer ist..data
gibt es aber erst ab C++2011.(vec.empty() ? 0 : &vec[0])
kann man noch schreiben in C++98.
-
Die erinnerung schrieb:
Ich ging davon aus, dass
sizeof(CUSTOMVERTEX) * vertices.size()
gleichgroß wiesizeof(vertices)
ist, dem war aber nicht so!Nö, dem ist auch nicht so; denn std::vector speichert den Kram indirekt.
-
krümelkacker schrieb:
Nö, dem ist auch nicht so; denn std::vector speichert den Kram indirekt.
Wenn ich das vorher gewusst hätte, aber man lernt eben täglich dazu...
-
krümelkacker schrieb:
Die erinnerung schrieb:
Ich ging davon aus, dass
sizeof(CUSTOMVERTEX) * vertices.size()
gleichgroß wiesizeof(vertices)
ist, dem war aber nicht so!Nö, dem ist auch nicht so; denn std::vector speichert den Kram indirekt.
Woarus übrigens folgt, dass vector hier wahrscheinlich gar nicht die richtige Datenstruktur ist. Wenn du vorher ein statisches Array hattest, dann wäre std::array (oder std::tr1::array bei älteren Compilern) das C++-Äquivalent. std::vector ist das was in C malloc war (oder auch für die gute alte Technik, wo man in C einfach eine große Zahl als Arraygröße genommen hat und gehofft hat, dass niemand über das Maximum geht.)
-
Ja ne, ich will ja nach und nach Daten rein schreiben...
Deshalb habe ich Vector genommen, da meines Wissens sich ein std::Array nicht erweitern lässt. Und falls das doch gehen sollte, ich bin mit Vector ganz zufrieden...
-
Die erinnerung schrieb:
Ja ne, ich will ja nach und nach Daten rein schreiben...
Deshalb habe ich Vector genommen, da meines Wissens sich ein std::Array nicht erweitern lässt. Und falls das doch gehen sollte, ich bin mit Vector ganz zufrieden...
Dann ist vector schon richtig.
-
Die erinnerung schrieb:
krümelkacker schrieb:
Nö, dem ist auch nicht so; denn std::vector speichert den Kram indirekt.
Wenn ich das vorher gewusst hätte, aber man lernt eben täglich dazu...
Auch ohne die Implementierung von std::vector zu kennen, ergibt sich das schon daraus, dass sizeof grundsätzlich eine zur Kompilierzeit bekannte Konstante liefert (von VLAs mal abgesehen, aber die gehören auch nicht zu Standard-C++).
-
Athar schrieb:
Auch ohne die Implementierung von std::vector zu kennen, ergibt sich das schon daraus, dass sizeof grundsätzlich eine zur Kompilierzeit bekannte Konstante liefert
Das wäre mir neu...
-
-
Ok. Wie ja gesagt ist mir neu. ich dachte, bis her immer, dass das in Runtime-Operator ist, da sich unter umständen die Größe eines Objekts ändern kann...
-
Die erinnerung schrieb:
[...] da sich unter umständen die Größe eines Objekts ändern kann...
Unter welchen Umständen könnte das passieren?
-
Ich dachte es wäre möglich. Z.B.: Vector, aber wie ich jetzt weiß, ändert der seine Größe nicht. Wie ja gesagt, ich dachte...
-
Die erinnerung schrieb:
Ich dachte es wäre möglich. Z.B.: Vector, aber wie ich jetzt weiß, ändert der seine Größe nicht. Wie ja gesagt, ich dachte...
Gehen wir mal zu C:
int *ptr; sizeof(ptr); // Meistens 4 oder 8 ptr = malloc(1000000); sizeof(ptr); // Immer noch 4 oder 8
Nun klar?