这里是用C++算法头文件编写的一段C++代码。
bool binary_search(vector<int>::iterator first, vector<int>::iterator last, int val)
{
first = lower_bound(first, last, val);
return (first != last) && !(val < *first);
}
我可以理解这个binary_search函数如何工作,但我不能理解为什么它使用“!(val<*first)”而不是(val==*first)。 '=='是否存在编程问题?
该算法被简单地指定为只要求类型与<
具有可比性,而不要求其他比较运算符(如==
)具有可比性。
这允许算法与不实现==
的类型一起使用(尽管这种情况可能很少)。 如果算法使用==
,情况就不是这样了。
注意,算法已经在lower_bound
中使用了<
(通过默认比较器),因此使用==
不会放松要求。