std::vector mit memcpy füllen?
-
ist:
std::vector<Elem> vec; memcpy(&vec[0], sourcepointer, size);garantiert? Oder kann was schief gehen / ist nicht definiert?
-
kurzfrag schrieb:
ist:
std::vector<Elem> vec; memcpy(&vec[0], sourcepointer, size);garantiert? Oder kann was schief gehen / ist nicht definiert?
Das kommt auf den Typ von Elem an.
-
Warum nicht std::copy???
Simon
-
Tachyon schrieb:
kurzfrag schrieb:
ist:
std::vector<Elem> vec; memcpy(&vec[0], sourcepointer, size);garantiert? Oder kann was schief gehen / ist nicht definiert?
Das kommt auf den Typ von Elem an.
Sollte ein pod sein.
theta schrieb:
Warum nicht std::copy???
SimonHab ich mich auch gefragt. Vielleicht Performancegründe?
-
kurzfrag schrieb:
Hab ich mich auch gefragt. Vielleicht Performancegründe?
Dann nimm std::copy. Das ist mit Sicherheit performant genug. Bei POD-Typen geht memcpy zwar, aber naja...
-
Mit std::memcopy einen std::vector zu kopieren ist nicht sehr portabel.
Die Performance: Das geht dann wohl unter "premature optimization", ausserdem ist es kein Fakt, dass std::memcpy schneller als std::copy ist.
Simon
-
Tachyon schrieb:
kurzfrag schrieb:
Hab ich mich auch gefragt. Vielleicht Performancegründe?
Dann nimm std::copy. Das ist mit Sicherheit performant genug. Bei POD-Typen geht memcpy zwar, aber naja...
ok danke.
theta schrieb:
Mit std::memcopy einen std::vector zu kopieren ist nicht sehr portabel.
Die Performance: Das geht dann wohl unter "premature optimization", ausserdem ist es kein Fakt, dass std::memcpy schneller als std::copy ist.
Simon
Durchaus möglich, wobei es sich um sehr große Element/Datenmengen handeln kann was vielleicht auch eine rolle spielt.
Ist nicht mein Source war nur zum Verständnis gefragt, danke an alle Beteiligten
-
kurzfrag schrieb:
ist:
std::vector<Elem> vec; memcpy(&vec[0], sourcepointer, size);garantiert? Oder kann was schief gehen / ist nicht definiert?
Wenn size hier != 0 ist, ist das undefiniert.