我正在查看这些页面上的 upper_bound 和 lower_bound 算法如何在 stl 中工作: lower_bound 、 upper_bound ,并且在这些页面上以相同的方式记录: lower_bound 、 upper_bound
查看链接中的代码,他们似乎对我做了完全相同的事情,只有以下几行不同(查看前 2 个链接中的代码):
下限(第 10 行):
if (*it<val) { // or: if (comp(*it,val)), for version (2)
上限(第 10 行):
if (!(val<*it)) // or: if (!comp(val,*it)), for version (2)
但是肯定颠倒比较的元素,然后将它们与 false 进行比较是双重否定的,因此它们会做完全相同的事情吗?
实际上是否存在我没有看到的差异,这是网站文档中的错误吗?如果是后者,正确的方法是什么?
原文由 xEric_xD 发布,翻译遵循 CC BY-SA 4.0 许可协议
Where
l
represents the lower bound ofb
, andu
represents the upper bound ofb
.因此,如果相对于所使用的比较存在“相等”的值范围,
lower_bound
给你第一个,upper_bound
给你一个过去的结果这些。这是 STL 范围的正常模式[first, last)
。