【发布时间】:2021-08-14 17:11:00
【问题描述】:
我理解为递增/递增数组找到的 Lower 和 Upper 的概念。 即
- 下界:迭代器指向范围 [first, last) >= Value 中的第一个元素
- 上限: 指向范围内第一个元素的迭代器 [first, last) > Value
下面是我面临问题的递减/非递增向量的代码:
#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
int main()
{
vector<int> vec = {45,40,35,12,6,3};
auto itr3 = lower_bound(vec.begin(),vec.end(),40);
auto itr4 = upper_bound(vec.begin(),vec.end(),40);
if(itr3 == vec.end() && itr4 == vec.end())
cout<<"Lower & Upper Bound not Found\n";
else
{
cout <<"lower Bound of 40 :"<<*itr3<<endl;
cout <<"Upper Bound of 40 :"<<*itr4<<endl;
}
return 0;
}
输出是:
Lower & Upper Bound not Found.
但如上所述,输出应该是这样的:
lower Bound of 40 :40
Upper Bound of 40 :45
请帮助我理解他在递减/非递增向量的情况下的下限和上限行为。
【问题讨论】:
-
lower_bound()和upper_bound()取决于特定的顺序。默认情况下,数据类型为std::less()。您的向量明确不提供此功能。要么向后使用它(即rbegin()和rend()),要么提供反映您选择的顺序的自定义谓词。
标签: c++ algorithm vector lower-bound upperbound