将数据从std::vector
设置为std::valarray
的最有效方法是什么?假设我们有std::valarray<double> my_valarray;
和std::vector<double> my_vector;
,我们想将数据从my_vector
复制到my_valarray
:
选项1(使用valarray
构造函数和副本分配):
my_valarray = std::valarray(my_vector.data(), my_vector.size());
选项2(调整大小和复制):
my_valarray.resize(my_vector.size());
std::copy(my_vector.begin(), my_vector.end(), std::begin(my_valarray));
之所以出现这个问题,是因为在这两种情况下,看起来复杂度都是 O(2n)。在第一种情况下,在构造期间将数据复制到临时
valarray
(一次分配+一遍复制数据),然后分配给最终对象(一次分配+一遍复制数据)。在第二种情况下,有一个分配+一遍将所有元素初始化为零,另一遍复制数据。 C++ 11的移动语义是否在第一种情况下适用,从而使其仅需要一次分配和一次通过即可复制数据? 最佳答案
是的,在第一种情况下适用移动语义,因为std::valarray(my_vector.data(), my_vector.size())
是右值,并且已为valarray
类(http://en.cppreference.com/w/cpp/numeric/valarray/operator%3D)定义了移动分配运算符。
关于c++ - 将数据从std::vector传递到std::valarray的最有效方法,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/27765187/