gpt4 book ai didi

c++ - 从迭代器推导出模板函数返回类型的值类型

转载 作者:太空狗 更新时间:2023-10-29 23:50:26 27 4
gpt4 key购买 nike

只是使用这个从容器计算总和和均值的简单代码段试验多个返回值。

template<typename Iter>
std::tuple<double, double> summean(Iter first1, Iter last1)
{
double sum = std::accumulate(first1, last1, 0.0);
double mean = sum / (last1-first1);

return {sum, mean};
}

该demo使用 double 计算作为demo。有没有一种优雅的方法可以在计算元组的返回类型时使用容器中值的精度?

最佳答案

您可以使用 std::iterator_traits::value_type :

typedef typename std::iterator_traits<Iter>::value_type value_type;

至于函数的声明和定义,在老式的 C++03 风格中,您可以执行以下操作:

template<typename Iter>
std::pair<typename std::iterator_traits<Iter>::value_type,
typename std::iterator_traits<Iter>::value_type>
summean(Iter first1, Iter last1)
{
typedef typename std::iterator_traits<Iter>::value_type value_type;
value_type sum = std::accumulate(first1, last1, value_type());
value_type mean = sum / (last1-first1);

return std::make_pair(sum, mean);
}

从 C++11 开始,您可以使用 decltype 和尾随返回类型来减少冗长:

template<typename Iter>
auto summean(Iter first1, Iter last1)->decltype(std::make_tuple(*first1, *first))
{
using value_type = typename std::iterator_traits<Iter>::value_type;
value_type sum = std::accumulate(first1, last1, value_type());
value_type mean = sum / (last1-first1);

return make_tuple(sum, mean);
}

关于c++ - 从迭代器推导出模板函数返回类型的值类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30354455/

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