gpt4 book ai didi

C++ vector 中的元素相乘

转载 作者:可可西里 更新时间:2023-11-01 16:25:51 47 4
gpt4 key购买 nike

我一直在寻找以下问题的更优解决方案,但似乎找不到。

假设我有一个 vector :

std::vector<double> vars = {1, 2, 3}

我要执行 1 * 2 * 3我知道我可以做到以下几点:

int multi = 1;

for(int i = 0; (i < vars.size()-1); i++)
{
multi *= vars[i];
}

但是,是否有更“C++11”的方式来做到这一点?我真的很想用 lambda 来做到这一点这样我就可以计算 vector 的乘法(乘积)而无需类中的其他函数,我宁愿在函数中计算它。

最佳答案

是的,像往常一样,有一个算法(尽管这个算法在 <numeric> 中),std::accumulate ( live example ):

using std::begin;
using std::end;
auto multi = std::accumulate(begin(vars), end(vars), 1, std::multiplies<double>());

std::multiplies<functional> , 也。默认情况下,std::accumulate使用 std::plus , 它添加了给 operator() 的两个值. std::multiplies是一个将它们相乘的仿函数。

在 C++14 中,您可以替换 std::multiplies<double>std::multiplies<> , 谁的 operator()是模板化的,将找出类型。根据我在 Eric Niebler 的 Ranges 提案中看到的内容,它以后可能看起来像 vars | accumulate(1, std::multiplies<>())。 ,但对此持保留态度。

关于C++ vector 中的元素相乘,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29146175/

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