《C++ Primer(第5版)》中std::lower_bound描述是否存在错误?
结论:这是《C++ Primer(第5版)》的翻译/表述错误,你的理解完全正确。
lower_bound的标准行为如下:
- 对于按默认比较器
<升序排列的序列,lower_bound(beg, end, val)返回第一个**元素值不小于val(即element >= val)**的迭代器,没有符合条件的元素就返回end,和你理解的完全一致。
书中的表述“第一个满足val不小于该元素”刚好把主语宾语搞反了,对应的条件是val >= element,完全不符合标准定义的行为。
可以用简单示例验证:
有序序列为{1,3,5,7},查找val=4时,lower_bound实际返回指向5的迭代器,符合5>=4的逻辑;如果按照书中的表述找4 >= element的第一个元素,返回的会是指向1的迭代器,和实际运行结果完全不符。
另外你摘录的这段内容里upper_bound的描述也不完整,完整定义是返回第一个元素值大于val的迭代器,和lower_bound共同组成等于val的元素的左闭右开区间。
内容的提问来源于stack exchange,提问作者Itachi Uchiwa
相关产品推荐
相关产品推荐

