如果你有一个函数int getMin(int a[], int n)
那么你会说什么是处理空数组的最干净的解决方案?
答案 0 :(得分:12)
返回指向最小元素的指针而不是元素本身。这样,超过数组末尾的指针值可以指示未找到。 (或者在这种情况下为空)
这是std::min_element
采取的策略,已经实现了你正在做的事情。
您甚至可以使用std::min_element
:
int* getMin(int a[], int n)
{
return std::min_element(a, a+n);
}
答案 1 :(得分:3)
假设您正在寻找数组中的最小值:
if (!n)
throw YourPreferredException();
或者:
#include <limits>
//...
if (!n)
return std::numeric_limits<int>::max();
或者,如果它永远不会发生:
#include <cassert>
//...
assert(n);
这取决于应用程序和您希望传入的值。最有意义的是什么以及适合现有代码库的内容很难猜测。
答案 2 :(得分:3)
也许相反,按标准库的方式执行:将两个迭代器作为参数,如果序列为空,则返回end
参数。最好还是使用min_element
而不是自己动手。
如果您需要以数组/长度方式执行throw
或返回std::numeric_limits<int>::max()
答案 3 :(得分:0)
如果没有对该领域的理解,肯定没有“最干净的解决方案”。在数学上,来自域的任何一组值的下限是该集合的所有元素的最大下界(在域中)。对于扩展的整数,对于空集合,这将是+无穷大。 (参见,例如,Wikipedia article on Empty Set)如果您的域是所有C ++ int值,则(数学上一致的)返回值将是INT_MAX。