使用C++和STL的向量元素产品

fee*_*ree 4 c++ stl

在C++中实现元素化产品并不困难:

vector<float> a_array;
vector<float> b_array;
vector<float> c_array;
vector<float> dot_array;
....
for(int i=0; i<a_array.size(); i++)
{
   float temp;
   temp = a_array[i]*b_array[i]*c_array[i];
   dot_array[i] = temp;
}
Run Code Online (Sandbox Code Playgroud)

这是一个非常简单的实现,我想知道STL中是否有更高效的算法.谢谢!

Mik*_*our 11

std::transform 可以用来乘以两个向量:

#include <algorithm>
#include <functional>

// Precondition: b.size() >= a.size() && r.size() >= a.size()
std::transform(a.begin(), a.end(), b.begin(), r.begin(), std::multiplies<float>());
Run Code Online (Sandbox Code Playgroud)

没有类似的标准算法具有两个以上的输入序列.

  • 2个问题:是[i]和b [i]复制到r [i]的产物 - 或者它被移动了吗?可以用a.begin()替换r.begin()(覆盖a)吗? (2认同)

jua*_*nza 7

看看std :: inner_product.

编辑我在问题是关于点积时发布了这个答案.对于元素方面的产品,请参阅std :: transform的第二个版本.