Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/139.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 制作C++;数组的最大函数:处理数组大小为0的情况的正确方法是什么?_C++_Arrays - Fatal编程技术网

C++ 制作C++;数组的最大函数:处理数组大小为0的情况的正确方法是什么?

C++ 制作C++;数组的最大函数:处理数组大小为0的情况的正确方法是什么?,c++,arrays,C++,Arrays,假设我需要一个返回数组最大值的函数 如果数组为空,则没有最大值。什么是正确的C++处理方法? 我可以想出几个办法。我想知道从C++纳粹的角度来看,哪一个会被认为是最恰当的?为什么?p> (一) 使用 模板 T最大值(T*arrPtr,尺寸) { 如果(n==0) 抛出(“不能有一个空数组的最大值,你这个白痴。”) T最高=*arrPtr 对于(T*i(arrPtr),j(arrPtr+n);i!=j;++i) 如果(*i>最高) 最高=*i; 回报最高; } (二) 使用 模板 bool ma

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

如果数组为空,则没有最大值。什么是正确的C++处理方法? 我可以想出几个办法。我想知道从C++纳粹的角度来看,哪一个会被认为是最恰当的?为什么?p> (一)

使用

模板
T最大值(T*arrPtr,尺寸)
{
如果(n==0)
抛出(“不能有一个空数组的最大值,你这个白痴。”)
T最高=*arrPtr
对于(T*i(arrPtr),j(arrPtr+n);i!=j;++i)
如果(*i>最高)
最高=*i;
回报最高;
}
(二)

使用

模板
bool max(T*arrPtr,尺寸n,T最高)
{
如果(n==0)
{
返回false;
}
其他的
{
对于(T*i(arrPtr),j(arrPtr+n);i!=j;++i)
如果(*i>最高)
最高=*i;
返回true;
}
}
(三)


使用StackOverflow的天才们即将发布的一些奇特的单行代码块。

从可行的角度来看,这两种方法都是非常有效的


如果您所在的团队已经制定了一些处理此类错误的策略,请坚持执行。如果您不是这样一个团队的成员,或者您正试图制定一个策略,我建议您采用
抛出
选项。它为您提供了更多关于故障原因的信息。

< P>每当有疑问时,我们应该尝试了解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; 
}
模板
迭代器max_implem(迭代器优先,迭代器最后){
如果(first==last)返回last;
//实现你的逻辑
最后返回;
}
模板
T最大值(T*arrPtr,尺寸){
T*out=max_implem(arrPtr,arrPtr+n);
返回*out;
}

因此,一般来说,我们应该尝试从我们的算法返回尽可能多的信息,以便以后可以使用它。在这种情况下,返回迭代器(指针)应该是显而易见的选择

我想问一下,您希望数组多长时间为空?如果这是一个例外情况,那么异常是适当的。另外一个在C++中没有用的方法是返回一个C++。我认为C++的方式是先取最后一个转发迭代器,然后返回一个Max元素的迭代器,最后如果第一个=最后一个(这实际上是Max元素)。
如果范围为空。您也可以将其用作累加器的初始值,因此您甚至不需要进行检查。(请注意,如果不能默认构造
t
,则这将不起作用。)
返回*outn==0
,则code>会导致未定义的行为,因此此
max()
函数仍然存在OP询问的相同问题!
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;
    }
}
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; 
}