【发布时间】:2018-11-19 22:31:24
【问题描述】:
我想使用 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 应用于两个向量 x1 和 x2?我是否必须使标量常数 c 成为具有相同元素的向量,例如 (c,c,c...c)?
提前致谢。
【问题讨论】:
-
你考虑过
std::bind吗?
标签: c++ c++11 lambda transform stdvector