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

时间:2012-07-31 10:21:52

标签: 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;
}

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

3 个答案:

答案 0 :(得分:10)

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>());

没有类似的标准算法,只有两个以上的输入序列。

答案 1 :(得分:7)

查看std::inner_product

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

答案 2 :(得分:0)

std::vector类实际上不是数学矢量,而是一个动态大小的数组,一个集合。你可能因为它的名字而感到困惑。定义一个实现数学运算的真实vector类,而不是{mis}使用std::vector