C++的下界查找函数

编程语言 2026-07-11

据我所知,lower_bound 只是一个 >= 查找操作。不过,下面的代码片段可以工作:

vector<size_t> udata = {5, 4};
vector<size_t>::const_iterator it = lower_bound(udata.begin() + 1, udata.end(), 4);
assert(it != udata.end());

但下面的断言失败:

udata.clear();
udata = {5, 4, 1, 2};
it = lower_bound(udata.begin() + 1, udata.end(), 4);
assert(it != udata.end());

为什么?我错过了什么?这是个bug吗?

解决方案

如果传给 lower_bound 的区间中的元素没有排序,或者至少没有被划分成一个小于目标值的前缀和一个不小于目标值的后缀,则其行为将是未定义的。

是的,这确实是一个bug。但这是你代码中的问题。

站内所有文章版权归属LeftHeroAI导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。

相关文章