Я хочу использовать std :: transform, чтобы сделать что-то похожее на binary_op, но с одной дополнительной константой, например, чтобы получить произведение двух векторов: x1 = (10,20,30,40,50) и x2 =(2,4,6,8,10), мы можем написать:
#include <iostream>
#include <algorithm>
#include <vector>
double multiply(double x, double y){
return x*y;
}
int main () {
std::vector<int> x1;
std::vector<int> x2;
for (int i=1; i<6; i++)
x1.push_back (i*10); //10,20,30,40,50
for (int i=1; i<6; i++)
x2.push_back (i*2); //2,4,6,8,10
std::transform (x1.begin(), x1.end(), x2.begin(), x1.begin(),multiply);
for (std::vector<int>::iterator it=x1.begin(); it!=x1.end(); ++it)
std::cout << ' ' << *it;
//output: 20,80,180,320,500
return 0;
}
Приведенный выше код будет умножать x1 и x2 поэлементно и возвращать (20,80,180,320,500).
Однако,если я хочу вычислить x1 $ \ dot $ x2 + c, где c - скалярная константа, такая как 1, как функция ниже:
double multiply(double x, double y, double c){
return x*y + c;
}
В этом случае, как я могу использовать std :: transformприменить на двух векторах х1 и х2?Должен ли я сделать скалярную константу c, чтобы она стала вектором с такими же элементами, как (c, c, c ... c)?
Заранее спасибо.