【发布时间】:2015-01-04 11:51:09
【问题描述】:
将数据从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 的移动语义是否适用于第一种情况,使其只需要一次分配和一次传递来复制数据?
【问题讨论】:
-
O(2n) = O(n)。 IE。它具有线性时间复杂度。
-
你为什么首先使用 valarray?
-
@Columbo 因为我正在用 valarrays 做一些向量数学,这就是它们的优点。当您可以使用 valarray 内置运算符时,不喜欢实现 lambdas
标签: c++ c++11 vector stl valarray