existierendem std::vector Datenbereich/Array zuweisen



  • Hallo,

    std::vector hat unter doch unter anderem den Range-Konstruktor:

    vector(InputIterator first, InputIterator last, const allocator_type& alloc = allocator_type());
    
    int myints[] = {16,2,77,29};
    std::vector<int> v(myints, myints + sizeof(myints) / sizeof(int));
    

    Gibt es eine Möglichkeit diese Range irgendwie per "move" in den vector hineinzubekommen, so dass vector::data() auf den Beginn des int-Arrays zeigt und vector::size() der Anzahl der Elemente entspricht? Oder geht das nur elementweise?

    Vielen Dank vorab.


  • Mod

    Geht nur Elementweise.



  • template<class T>
    class MyContainer
    {
        // Daten werden in zusammenhängendem Speicherbereich verwaltet
    };
    
    MyContainer<MyType> c(/*jede Menge MyTypes*/);
    
    std::vector<MyType> v1(c.begin(), c.end());
    
    std::vector<MyType> v2(c.size());
    std::move(c.begin(), c.end(), v.begin());
    

    Was wäre denn ein möglichst effizienter Weg, im obigen Fall einen vector die Daten von MyContainer "übernehmen" zu lassen. Range-Konstruktor wie für v1, ein move wie für v2, oder besser etwas ganz anderes? (Die Daten in MyContainer müssen nicht gültig bleiben.)


  • Mod

    jklö schrieb:

    Range-Konstruktor wie für v1, ein move wie für v2

    genau:

    std::vector<MyType> v(std::make_move_iterator(c.begin()), std::make_move_iterator(c.end()));
    


  • Eine Kombination aus beidem: Besten Dank!


Anmelden zum Antworten