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