std :: move()具有不同的数据类型

deb*_*air 1 c++ boost stl

我有boost::array<int,8> array1,我有std::vector<int> temp(8);我如何执行std::move()boost::arraystd::vector,我想避免memcpy().

Nat*_*ica 7

你不能只是将容器的内脏移动到一个std::vector. std::vector没有提供获取缓冲区所有权的方法.您必须将各个元素复制/移动到std::vector.


你可以做的一件事是使用它的迭代器构造函数将各个元素移动到向量中std::make_move_iterator.你不会看到任何好处,int但如果类型移动比复制更快,那么你会.那看起来像

some_container foo;
// populate foo
std::vector<some_type> moved_into{std::make_move_iterator(std::begin(foo)),
                                  std::make_move_iterator(std::end(foo))};
Run Code Online (Sandbox Code Playgroud)


Jan*_*ans 5

boost::array并且std::vector是不相关的类型,std::vector对于如何构建而言一无所知boost::array.

另一方面,您可以使用std::move迭代器:

boost::array<int, 8> a;
std::vector<int> v;
v.reserve(a.size());

std::move(a.begin(), a.end(), std::back_inserter(v));
Run Code Online (Sandbox Code Playgroud)