提问者:小点点

在C++算法头中,为什么要使用“!(val<*first)”?


这里是用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)。 '=='是否存在编程问题?


共1个答案

匿名用户

该算法被简单地指定为只要求类型与<具有可比性,而不要求其他比较运算符(如==)具有可比性。

这允许算法与不实现==的类型一起使用(尽管这种情况可能很少)。 如果算法使用==,情况就不是这样了。

注意,算法已经在lower_bound中使用了<(通过默认比较器),因此使用==不会放松要求。

相关问题


MySQL Query : SELECT * FROM v9_ask_question WHERE 1=1 AND question regexp '(c++|算法|头中|val)' ORDER BY qid DESC LIMIT 20
MySQL Error : Got error 'repetition-operator operand invalid' from regexp
MySQL Errno : 1139
Message : Got error 'repetition-operator operand invalid' from regexp
Need Help?