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???
    Simon

    Hab 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 🙂


  • Mod

    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.


Anmelden zum Antworten