为数组创建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?
假设我需要一个返回数组最大值的函数。
如果数组为空,则没有最大值。什么是正确的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
选项。它使您能够提供有关失败原因的更多信息。
相关文章:
- 是默认情况下分配给char数组常量的值
- C++默认情况下,指针类型数组的元素是否保证初始化为 nullptr?
- C++数组与向量排序(在我的情况下,向量比数组慢~2.5倍(无优化))
- 如何在不使用 C++ 中的数组或函数的情况下查找 N 位数字的所有排列
- 如何在没有硬编码的情况下以C++为单位获取类数组的长度?
- 有没有一种惯用的方法可以在不存储变换或不必要地重新计算的情况下找到数组变换的最小/最大值?
- 如何在不知道大小的情况下读取文本文件并存储到数组中
- 在不进行排序的情况下查找数组中n个最小值的索引
- 在这种情况下,数组a会被取消分配吗
- 在不复制数据的情况下,将double数组转换为只有double成员的structs数组
- 在给定元素在螺旋上的位置的情况下,在二维数组中查找元素
- 推荐的方法在不初始化值的情况下使数组类型为 std::unique_ptr?
- 在哪种情况下,C++会在编译时进行数组边界检查?
- 在这种情况下,删除指针数组期间会发生什么?
- 是否可以在不使用数组的情况下将不同数量的相同类型的参数传递给函数?
- 当 95% 情况下的值为 0 或 1 时,对非常大的数组进行随机访问的任何优化
- 如何在 C++03 中没有重复代码的情况下在堆栈上创建一个非常量 C 字符串数组?
- 如何在不知道Arduino中知道其大小的情况下创建数组和存储值
- 为什么我可以在不使用赋值运算符的情况下使用列表初始化普通数组
- 字符串/数组情况c++