将数据从std::vector
设置为std::valarray
的最有效方法是什么?假设我们有std::valarray<double> my_valarray;
和std::vector<double> my_vector;
,我们要复制的数据对面my_vector
到my_valarray
:将数据从std :: vector传递到std :: 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的移动语义是否适用,只需要一次分配和一次复制就可以复制数据?
* O(2n)= O(n)*。即它具有线性时间复杂度。 – Columbo 2015-01-04 11:57:37
为什么你首先使用valarray? – Columbo 2015-01-04 11:59:09
@Columbo因为我正在用valarrays做一些矢量数学,这就是他们的优点。当您可以使用valarray内置运算符时,不喜欢实现lambda表达式 – 2015-01-04 12:11:08