17

我正在尝试使用两个向量进行以下数学运算:

v1 = [a1][a2][a3][a4][a5]
v2 = [b1][b2][b3][b4]b5]

想计算:

v = [a2*b2][a3*b3][a4*b4][a5*b5]

请注意,我不希望新向量中的第一个元素。

我想知道是否有比 for 循环(使用推回)更有效的(单行)方法在 c++ 中将(元素方式)两个向量相乘。我目前的做法如下,

for(long i=1;i < v1.size();++i){
v.push_back(v1[i]*v2[i]);
}

我还尝试了以下方法,

 for (long i = 1; i < v1.size(); ++i){
     v[i-1] = v1[i]*v2[i];
 }

有什么建议么?

4

2 回答 2

27
std::transform( v1.begin()+1, v1.end(),
                v2.begin()+1, v.begin(),  // assumes v1,v2 of same size > 1, 
                                          //       v one element smaller
                std::multiplies<int>() ); // assumes values are 'int'

如果为空,您可以替换v.begin()为,您应该预先存储以避免多次分配。std::back_inserter(v)vreserve()

于 2012-12-05T17:04:58.290 回答
12

您可以查看std::valarray。它旨在允许对数组中的每个元素进行数学运算。

于 2012-12-05T17:14:58.150 回答