【发布时间】:2017-05-26 13:14:42
【问题描述】:
std::accumulate 的返回类型取决于“init”,即如果是整数则返回整数,如果是双精度则返回双精度。
我有一个这样的 sum 模板函数:
T mean(std::vector<T> vector)
{
T sum = std::accumulate(vector.begin(), vector.end(), X);
}
我应该用什么代替X?
【问题讨论】:
std::accumulate 的返回类型取决于“init”,即如果是整数则返回整数,如果是双精度则返回双精度。
我有一个这样的 sum 模板函数:
T mean(std::vector<T> vector)
{
T sum = std::accumulate(vector.begin(), vector.end(), X);
}
我应该用什么代替X?
【问题讨论】:
您可以只使用T{},它是默认构造的T。例如
T sum = std::accumulate(vector.begin(), vector.end(), T{});
如果你需要用一些初始值来初始化它,你可以
T sum = std::accumulate(vector.begin(), vector.end(), T{some_initial_value});
或
T sum = std::accumulate(vector.begin(), vector.end(), static_cast<T>(some_initial_value));
【讨论】: