C++17 使用 reduce 和乘法相乘列表不起作用

Lar*_*een 0 c++ c++17

我想乘用浮列表元素reduce会同multiplies

#include <iostream>
#include <algorithm>
#include <iterator>
#include <numeric>
using namespace std;

int main () {
  vector<float>series{2, 1.91421, 2.06538, 2.25, 2.43607}; 
  float result = reduce(series.begin(), series.end(), 1, multiplies<float>() );
  cout << "result: " << result << endl; // it's 29
  // it must have been 43.340291222788287 
}
Run Code Online (Sandbox Code Playgroud)

如何正确地做到这一点?请注意,我想尽可能地将它reduce与 结合使用multiplies,而不是任何其他函数,例如transform_reduce或任何其他方法。

Bar*_*rry 6

注意接口reduce()是:

template<class InputIt, class T, class BinaryOp>
T reduce(InputIt first, InputIt last, T init, BinaryOp binary_op);
Run Code Online (Sandbox Code Playgroud)

值得注意的是,它从初始值推导出类型并返回该类型。您正在传入1,这是一个int. 所以这会返回int并且内部累加器是一个int. 那是......由于显而易见的原因,效果不佳(无论您使用的是multiplies<float>,结果int无论如何都会存储在 中)。

你要:

float result = reduce(series.begin(), series.end(), 1.0f, multiplies<float>() );
Run Code Online (Sandbox Code Playgroud)

你甚至不需要在 上指定类型multipliesmultiplies{}工作正常。