C++ stl中上下界的区别

C++ stl中上下界的区别,c++,stl,C++,Stl,我在这些页面上查看了stl中的上界和下界算法是如何工作的,并且在这些页面上以相同的方式进行了记录: 从链接中查看代码,它们似乎对我做了完全相同的事情,只有以下几行不同(查看前两个链接中的代码): 下限(第10行): if(*it) 其中,l表示b的下限,u表示b的上限 因此,如果存在与所用比较“相等”的值范围,下限为您提供第一个值,上限为您提供一个超过这些值的值。这是STL范围的正常模式[第一,最后)下限: 返回一个迭代器,该迭代器指向[first,last]范围内的第一个元素,该元素的比较值不

我在这些页面上查看了stl中的上界和下界算法是如何工作的,并且在这些页面上以相同的方式进行了记录:

从链接中查看代码,它们似乎对我做了完全相同的事情,只有以下几行不同(查看前两个链接中的代码):

下限(第10行):

if(*it)
其中,
l
表示
b
的下限,
u
表示
b
的上限


因此,如果存在与所用比较“相等”的值范围,
下限
为您提供第一个值,
上限
为您提供一个超过这些值的值。这是STL范围的正常模式
[第一,最后)
下限

返回一个迭代器,该迭代器指向[first,last]范围内的第一个元素,该元素的比较值不小于val

上限

返回一个迭代器,该迭代器指向范围[first,last]中的第一个元素,该元素的值大于val。

不小于某事物和大于某事物之间有区别

例如,如果您比较
4
5
,您可以这样说

5 is _not less than_ 4
5 is _greater than_  4
但是,如果进行比较,则比较
4
4

4 is _not less than_    4
4 is _not greater than_ 4

下面是一个简单的答案,也就是记住这一点的方法

std::lower_bound
-将迭代器返回给给定范围内
等于或大于
val的第一个元素


std::upper_bound
-将迭代器返回到给定范围内大于val的第一个元素

vscode的简单答案

下限:找到可以插入val而不改变顺序的第一个位置


上限:查找在不更改顺序的情况下可以插入val的最后位置

(val@Jarod42啊,当然,我忽略了这一点。我喜欢SGI STL描述:,。这正是名称的意思。它们返回下限(即开始)或上限(即结束后的一个)与指定的
值等效的元素范围和
相等\u范围
以成对方式提供两个位置
。谢谢,我忽略了一个事实,即它也会比较上界中的相等元素。如果可能的话,我会接受你的答案。很好且清楚的解释。我认为如果你为列表中不存在
b
的情况添加一个例子,例如
a c
,会更好。
value a a a b b b c c c
index 0 1 2 3 4 5 6 7 8
bound       l     u
5 is _not less than_ 4
5 is _greater than_  4
4 is _not less than_    4
4 is _not greater than_ 4