c++ - 将数据从 std::vector 传递到 std::valarray 的最有效方法

标签 c++ c++11 vector stl valarray

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/

相关文章:

c++ - openmp并行性能

c++ - 不是 VS2017 中的编译时常量表达式

java - 如何比较 vector 和 int 中的对象? : Java

scala - 如何将 Array[Long] 转换为 Scala 数据帧中的 Vector 类型?

c++ - 如何以编程方式防止 linux 计算机休眠或打开屏幕保护程序?

c++ - 从 Visual Studio 2008 链接的 SimpleITK

c++ - 如何使用 cpp 将宏转换为字符串?

c++ - 运行外部 .exe 并从中接收返回值

C++ Lambda 捕获私有(private)类成员

Matlab 将矩阵中的每一行乘以不同的数字