17

私は2つのベクトルで次の数学演算を実行しようとしています。

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

計算したい:

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

新しいベクトルの最初の要素は必要ないことに注意してください。

forループ(プッシュバックを使用)よりも、c ++で2つのベクトルを(要素ごとに)乗算するより効率的な(ワンライナー)方法があるかどうか疑問に思いました。私の現在のアプローチは次のとおりです。

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 に答える