C ++可以使用移动语义将数据从一个向量移动到另一个向量

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)

son*_*yao 5

是的,你可以用 来做到这一点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)

  • 这对于双精度向量来说有点毫无意义。OP 应该移动整个向量,而不是其内容。 (5认同)

Gui*_*cot 5

您可以使用算法std::move代替std::copy

std::move(oldData.begin(), oldData.end(), newData.begin());
Run Code Online (Sandbox Code Playgroud)

它仍将逐个元素地传输元素,但会移动它们。不要忘记以正确的大小预先分配向量,以免元素移动过多。