Upper_bound()在前闭后开区间查找的关键字的上界,返回大于val的第一个元素位置。
首先介绍的是第一种用法:查找比某个元素大的第一个的值。
代码如下:
vector<int> a = { 0,2,1,5,8,7,4,9,6 };
vector<int>::iterator ite;
for_each(a.begin(), a.end(), [](int a) {cout << a << " "; });
cout << endl;
sort(a.begin(), a.end());
for_each(a.begin(), a.end(), [](int a) {cout << a << " "; });
cout << endl;
ite = upper_bound(a.begin(), a.end(), 2); //返回数组中第一个大于被查数的值
if (ite != a.end())//返回值找到返回该数字地址,没找到返回end
{
cout << *ite << " " << ite - a.begin() << endl;
}
效果图:
说明:排序之后,获取第一个值比2大的数,和它的索引值。
第二种用法,用到我们的反函数
代码如下:
vector<int> a = { 0,2,1,5,8,7,4,9,6 };
vector<int>::iterator ite;
for_each(a.begin(), a.end(), [](int a) {cout << a << " "; });
cout << endl;
sort(a.begin(), a.end());
for_each(a.begin(), a.end(), [](int a) {cout << a << " "; });
cout << endl;
ite = upper_bound(a.begin(), a.end(), 2); //返回数组中第一个大于被查数的值
if (ite != a.end())//返回值找到返回该数字地址,没找到返回end
{
cout << *ite << " " << ite - a.begin() << endl;
}
sort(a.begin(), a.end(),greater<int>());
for_each(a.begin(), a.end(), [](int a) {cout << a << " "; });
cout << endl;
ite = upper_bound(a.begin(), a.end(), 2,greater<int>());
if (ite != a.end())
{
cout << *ite << " " << ite - a.begin() << endl;
}
说明:排序之后,获取第一个值比2小的数,和它的索引值。