gpt4 book ai didi

c++ - C++中的加权加法

转载 作者:太空狗 更新时间:2023-10-29 23:39:05 25 4
gpt4 key购买 nike

将两个数组逐个元素相加并将结果保存到第一个数组可以通过以下代码实现(用c++14编译):

#include <algorithm>
#include <iostream>
#include <array>

int main()
{
std::array<double,3> a = {1, 2, 3};
std::array<double,3> b = {4, 5, 6};
std::transform(a.begin( ), a.end( ), b.begin( ), a.begin( ),std::plus<double>( ));

for(double d : a)
std::cout << d << std::endl;

return 0;
}

也就是

a[i] = a[i] + b[i]

如果我想获取以下内容怎么办?是否仍然可以通过 std::transform 或 std 算法中的任何其他功能来完成?

a[i] = a[i] * weight + b[i] * (1. - weight)

非常感谢...

最佳答案

传统的方法是有状态的仿函数。现在我们可以用 lambda 来完成:

#include <algorithm>
#include <iostream>
#include <array>

int main()
{
std::array<double,3> a = {1, 2, 3};
std::array<double,3> b = {4, 5, 6};
const double weight = 0.7;

std::transform(a.begin( ), a.end( ), b.begin( ), a.begin( ),
[weight](double aa, double bb) {
return aa*weight + bb*(1. - weight);
}
);

for(double d : a)
std::cout << d << std::endl;

return 0;
}

按照要求,老办法:

#include <algorithm>
#include <iostream>
#include <array>

struct weighted_add {
const double weight;
double operator() const (double aa, double bb) {
return aa*weight + bb*(1.-weight);
}
weighted_add(double weight_) : weight(weight_) {}
};

int main()
{
std::array<double,3> a = {1, 2, 3};
std::array<double,3> b = {4, 5, 6};

std::transform(a.begin( ), a.end( ), b.begin( ), a.begin( ), weighted_add(0.7));

for(double d : a)
std::cout << d << std::endl;

return 0;
}

(注意:这些代码都没有经过编译器。当心错误)。

关于c++ - C++中的加权加法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42837626/

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