空数组中的最小元素

时间:2011-09-27 20:49:50

标签: c++ algorithm

如果你有一个函数int getMin(int a[], int n)那么你会说什么是处理空数组的最干净的解决方案?

4 个答案:

答案 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。