对于每个函数,我得到一个有限大小的浮点数,我需要选择它。
所以,如果我有类似
的东西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个小数点浮点数。
答案 0 :(得分:6)
std::min_element
有一个带有比较函数对象的重载;这就是我在这里使用的:
float val = *std::min_element(std::begin(v), std::end(v),
[](float a, float b) { return fabs(a) < fabs(b); } );
答案 1 :(得分:1)
你必须经历阵列上的每个数字,所以最有效的答案将是O(n)。
一旦你知道了这一点,你就会意识到只需浏览每个数字并检查它是否接近零,你所选择的最后一个数字就可以完成交易。
答案 2 :(得分: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);
答案 3 :(得分:0)
std::min_element
那样迭代std::set<>
。然后使用it=std::set::lower_bound(0)
并将*it
与*(it+1)
进行比较。对于大数据量,这将更好地扩展