Zyl*_*der 2 c++ lower-bound upperbound
这是代码.结果我得到"4 4".不明白为什么它不是"2 4"(根据下限和上限的'defenitions).
#include <bits/stdc++.h>
using namespace std;
int main()
{
vector<int> v = {1, 2, 4, 5};
vector<int>::iterator s , f;
s = lower_bound(v.begin(), v.end(), 3);
f = upper_bound(v.begin(), v.end(), 3);
cout << (*s) << " " << (*f);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
返回指向范围[first,last]中第一个元素的迭代器 ,它不会比val小.
第一个元素(从向量的开头)不小于3是4因此lower_bound返回4.
返回指向范围[first,last]中第一个元素的迭代器,它比较大于val.
第一个元素(来自载体的开始),它大于3是4并因此upper_bound返回4.
这种混淆的原因是因为upper_bound返回大于给定值的第一个元素,因此通过对称性我们期望lower_bound返回小于给定值的最后一个元素(从向量的开头).但唉,这个std功能并不遵循这种"预期的"对称性.