工作中想写个变形的二分查找, 于是想去std中看看std::binary_search有没有什么可以直接复制的源码, 忽然意识到一个挺有意思的问题。
先把std::binary_search的源码粘上:
template<class _FwdIt,
class _Ty> inline
bool binary_search(_FwdIt _First, _FwdIt _Last, const _Ty& _Val)
{ // test if _Val equivalent to some element, using operator<
return (_STD binary_search(_First, _Last, _Val, less<>()));
}
template<class _FwdIt,
class _Ty,
class _Pr> inline
bool binary_search(_FwdIt _First, _FwdIt _Last,
const _Ty& _Val, _Pr _Pred)
{ // test if _Val equivalent to some element, using _Pred
_First = _STD lower_bound(_First, _Last, _Val, _Pred);
return (_First !

本文分析了std::binary_search的源码,发现其内部使用了_distance计算元素间的距离,可能导致在某些情况下效率不高。作者提出了疑问:既然需要遍历元素,为什么不直接遍历并检查目标值?并讨论了可能的原因,如通用性与专业性的权衡。
最低0.47元/天 解锁文章
3690

被折叠的 条评论
为什么被折叠?



