我正在查看algorithms列表并决定查看find方法
查找方法
template<class InputIterator, class T>
InputIterator find (InputIterator first, InputIterator last, const T& val)
{
while (first!=last) {
if (*first==val) return first;
++first;
}
return last;
}
似乎查找的运行时间为Big O(n),因为它遍历容器中的每个元素以查找值。
我的想法立刻想到了Binary Search,我去看看它。
二进制搜索
template <class ForwardIterator, class T>
bool binary_search (ForwardIterator first, ForwardIterator last, const T& val)
{
first = std::lower_bound(first,last,val);
return (first!=last && !(val<*first));
}
知道它利用了另一个函数:lower bound,我继续研究下限,返回一个迭代器,指向范围[first,last]中的第一个元素,它不比val小。
这是我的分析
假设一个数组数据结构
[1,4,7,10,12]
如果我们使用二进制搜索来搜索6,first
将等于指向7的迭代器
*first
的值为1,val
的值为6
!(val<*first)
将是真的
自first!=last
== true&amp;&amp; !(val<*first)
== true
,即使数组
我知道我的推理存在缺陷,有人可以向我解释在哪里 我出错了吗?
答案 0 :(得分:3)
*first
的价值为1
有你的问题。 first
是值为7的元素的迭代器,因此*first
为7.这使!(val<*first)
成为!(6<7)
false
。