gpt4 book ai didi

c++ - std::transform 以两个 std::vector 和一个常量作为参数

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:59:22 26 4
gpt4 key购买 nike

我想使用 std::transform 做一些类似于 binary_op 的事情,但有一个额外的常量,例如,得到两个 vector 的乘积: 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 应用于两个 vector x1 和 x2?我是否必须使标量常数 c 成为具有相同元素(如 (c,c,c...c))的 vector ?

提前致谢。

最佳答案

试试这个

int c = 20;
std::transform (x1.begin(), x1.end(), x2.begin(), x1.begin(),[&c](auto i, auto j) { return multiply(i,j) + c ; });

是lambda函数; i 是来自 x1 的元素,j 是来自 x2 的元素。 [&] 表示通过引用捕获在 lambda 之外定义的所有值。

关于c++ - std::transform 以两个 std::vector 和一个常量作为参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50784760/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com