我试图用两个向量进行以下数学运算:
v1 = [a1][a2][a3][a4][a5]
v2 = [b1][b2][b3][b4]b5]
Run Code Online (Sandbox Code Playgroud)
想要计算:
v = [a2*b2][a3*b3][a4*b4][a5*b5]
Run Code Online (Sandbox Code Playgroud)
请注意,我不想要新向量中的第一个元素.
我想知道是否有一种更有效(单线程)的方法来在c ++中乘以(逐个元素)两个向量而不是for-loop(使用回推).我目前的做法如下,
for(long i=1;i < v1.size();++i){
v.push_back(v1[i]*v2[i]);
}
Run Code Online (Sandbox Code Playgroud)
我也试过以下,
for (long i = 1; i < v1.size(); ++i){
v[i-1] = v1[i]*v2[i];
}
Run Code Online (Sandbox Code Playgroud)
有什么建议?
Dav*_*eas 19
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'
Run Code Online (Sandbox Code Playgroud)
您可以替换v.begin()为std::back_inserter(v)if v为空,您应该reserve()预先记住内存以避免多次分配.