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.
-
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.)
-
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!