4

对于每个函数,我得到/拥有一个需要选择的有限大小的浮点数组。

所以如果我有类似的东西

1)

 {-0.02, 0.5, 0.98, -0.15, etc... }

我会从这个列表中选择“-0.02”。

2)

 {-0.78, 0.003, 0.1, -1.8, etc... }

现在,我会从这个列表中选择“0.003”。

这只是一个例子。在我的真实程序中,我有 5-6 个小数点的浮点数。

4

4 回答 4

6

std::min_element有一个采用比较函数对象的重载;这就是我在这里使用的:

float val = *std::min_element(std::begin(v), std::end(v),
    [](float a, float b) { return fabs(a) < fabs(b); } );
于 2012-12-09T14:04:09.577 回答
1

无论如何,您必须遍历数组上的每个数字,因此最有效的答案将在 O(n) 中。

一旦你知道了这一点,你就会意识到,只要检查每个数字并检查你选择的最后一个数字是否接近于零,就可以达成交易。

于 2012-12-09T13:52:52.737 回答
1

使用带有比较功能的std::min_element应该归档您想要的内容。

template<class T> 
const T& abs_min(const T& a, const T& b)
{
    return (fabs(a) < fabs(b)) ;
}

const SIZE = 5;
float v[SIZE ] {-0.78, 0.003, 0.1, -1.8, 0.8};
float val = *std::min_element(v, v+SIZE , min_abs);
于 2012-12-09T14:30:21.890 回答
0
  • 如果您必须使用数组并且它的大小很小 - 只需像这样迭代std::min_element
  • 如果您可以自由选择订购的容器,请使用std::set<>。然后使用并与it=std::set::lower_bound(0)比较。这将更好地扩展大数据大小*it*(it+1)
于 2012-12-09T14:09:22.760 回答