bla*_*eep 1 c++ vector move-semantics c++11
下面的代码将数据从一个向量复制到另一个向量。如果向量很大,那么我猜这很昂贵。是否可以在此处使用移动语义将数据从一个向量复制到另一个向量?
std::vector<double> newData(Shape.Size(), 0);
std::vector<double> oldData = a->getData();
std::copy(oldData.begin(), oldData.end(), newData.begin());
Run Code Online (Sandbox Code Playgroud)
是的,你可以用 来做到这一点std::move_iterator。
std::copy(std::make_move_iterator(oldData.begin()),
std::make_move_iterator(oldData.end()),
newData.begin());
Run Code Online (Sandbox Code Playgroud)
正如@tkauslvector所说,这对于内置类型没有多大意义;在这种情况下最后执行复制。您可能想直接移动vector,例如
std::vector<double> newData = std::move(oldData); // move construction
Run Code Online (Sandbox Code Playgroud)
或者
newData = std::move(oldData); // move assignment
Run Code Online (Sandbox Code Playgroud)
您可以使用算法std::move代替std::copy:
std::move(oldData.begin(), oldData.end(), newData.begin());
Run Code Online (Sandbox Code Playgroud)
它仍将逐个元素地传输元素,但会移动它们。不要忘记以正确的大小预先分配向量,以免元素移动过多。