执行矢量运算

Waw*_*100 2 c++ vector

我正在使用向量容器来存储双精度数组.有没有快速的方法将我的向量中的每个元素乘以一些标量而不使用循环.

例如:

  vector<double> Array(10,1);
Run Code Online (Sandbox Code Playgroud)

将使用初始值1初始化10个双精度数组.要将此数组乘以0.5,我会写:

  for(unsigned int i=0; i<Array.size(); i++) 
     Array[i] = 0.5*Array[i]; 
Run Code Online (Sandbox Code Playgroud)

那还有另一种方式吗?我使用了重载'*'运算符的valarray,以便:

     Array = 0.5 * Array; 
Run Code Online (Sandbox Code Playgroud)

是有效的,但我宁愿不使用valarray,因为它似乎是一个更标准的操作数组的方法.

谢谢!

GMa*_*ckG 10

你可以这样做:

std::transform(Array.begin(), Array.end(), Array.begin(),
                std::bind2nd(std::multiplies<double>(), 0.5));
Run Code Online (Sandbox Code Playgroud)

为了获得元素的总和:

double sum = std::accumulate(Array.begin(), Array.end(), 0.0);
Run Code Online (Sandbox Code Playgroud)

并且为了回应sqrt每个要素:

std::transform(Array.begin(), Array.end(), Array.begin(),
                static_cast<double (*)(double)>(std::sqrt));
Run Code Online (Sandbox Code Playgroud)

该演员表是选择正确的过载.