时间:2010-07-26 06:11:45

标签: c++

8 个答案:

答案 0 :(得分:9)

答案 1 :(得分:3)

答案 2 :(得分:3)

答案 3 :(得分:2)

答案 4 :(得分:2)

答案 5 :(得分:1)

答案 6 :(得分:1)

答案 7 :(得分:1)

更通用的问题是找到给定输入的最大值。我们可以将 std::max 概括为这样的:

template <typename T, typename ... Ts>
T Max (const T && input_1, const Ts && ... inputs)
{
    // initialise:
    T max = input_1;

    // find max:
    ([&] (T i)
    {
        if (i > max)
            max = i;

    } (inputs), ...);
    
    return max;
}

(上面是 c++17 样式,但我们可以在前面的 c++ 中以不太漂亮的方式编写相同的东西)

这样可以找到最大值:

int max = Max<int>(0, up(), down(), right());

我们添加 <int> 以指定我们要将输入转换为什么,以防某些是 unsignedfloat 等。

如果调用的顺序确实很重要,那么我们能做的再好不过了:

int max = 0;
max = std::max(max, up());
max = std::max(max, down());
max = std::max(max, right());

我们可以创建一个泛型函数,比如上面的 Max,它接受​​一个函数/函子列表,但这是一个如此不寻常的问题,我怀疑你会重新-使用代码。