为数组创建c++ max函数:处理数组大小为0的情况的正确方法是什么?

Making a C++ max function for an array: What is the proper way to handle the case of the array size being 0?

本文关键字:数组 情况 方法 是什么 max c++ 创建 函数 处理 小为      更新时间:2023-10-16

假设我需要一个返回数组最大值的函数。

如果数组为空,则没有最大值。什么是正确的c++方式来处理?

我能想到一些方法。我想知道从c++纳粹的角度来看,哪一种被认为是"最合适的",为什么?

(1)使用

template <class T>
T max(T* arrPtr, size_t n)
{
    if (n == 0)
       throw ("Can't have the max of an empty array, you idiot.")
    T highest = *arrPtr
    for (T* i(arrPtr), j(arrPtr + n); i != j; ++i)
       if (*i > highest)
          highest = *i;
    return highest;
}

(2)使用

template <class T>
bool max (T* arrPtr, size_t n, T highest)
{
    if (n == 0)
    {
        return false;
    }
    else
    {
        for (T* i(arrPtr), j(arrPtr + n); i != j; ++i)
            if (*i > highest)
                highest = *i;
        return true;
    }
}

(3)

使用一些花哨的一行代码块,这是天才在StackOverflow即将发布的

每当有疑问时,我们应该尝试理解c++ STL算法接口以及它们是如何编写的。我相信这是世界上最优雅的c++代码之一。所以你的程序应该这样写

template <class Iterator>
Iterator max_implem(Iterator first, Iterator last) {
    if (first == last) return last;
    // implement your logic
    return last;
}

template <class T>
T max(T* arrPtr, size_t n) {
 T* out = max_implem(arrPtr, arrPtr+n);
 return *out; 
}
所以一般来说,我们应该尝试从算法中返回尽可能多的信息,以便以后可以使用它。在这种情况下,返回迭代器(指针)应该是显而易见的选择。

在可行的意义上,这两种处理问题的方法都是完全有效的。

如果你所在的团队已经制定了一些处理此类错误的政策,请坚持下去。如果您不是这样一个团队的一员,或者您正在尝试制定一个策略,我建议您采用throw选项。它使您能够提供有关失败原因的更多信息。

相关文章: