在本文中,我们将讨论在C ++ STL中按非递增顺序排序的数组的vector::upper_bound()和vector::lower_bound()。
向量类似于动态数组。只要我们将值插入存储值的容器中或从中删除值,它们就可以自行修改其大小。
在向量中,下限返回一个迭代器,该迭代器指向不比较给定值的范围内的第一个元素。Upper Bound返回小于给定值范围内的迭代器指向元素。
输入项
30 30 30 20 20 20 10 10
输出结果
Lower bound of 20= 3 Upper bound of 20= 6
输入项
9 9 8 8 8 7 7 7 6 6 6 6
输出结果
Lower bound of 7= 5 Upper bound of 7= 8
它返回指向该范围的第一个元素的迭代器,还返回并指向该范围的最后一个元素的迭代器。
首先,我们初始化向量。
然后,我们将向量元素以非递增顺序排序。
然后我们找到它的下界。
然后我们找到它的上限。
最后,我们打印了两个边界。
通过使用上述方法,我们可以找出任何向量的下界和上限,有必要对向量进行排序以找到其下界和上限。如果向量未排序,那么我们将找不到其边界
/ / C++ program to demonstrate the working of lower bound and upper bound #include<iosteam.h> #include<vector.h> Using namespace std; int main ( ){ int vect[ ] = {13,13,13,16,16,16,17,17,17,17,18,18} vector<int> v(vect, vect+8); sort (v.begin( ), v.end( ), greater<int>( )); cout<< “ \n Sorted Vector: ”; for( auto i = vect.begin( ), i =! vect.end( ), ++i) vector<int> iterator low, up; low = lower_bound (v.begin( ), v.end( ), 17); up = upper_bound (v.begin( ), v.end( ), 17); cout<<” Lower bound” << (lower – v.begin( ))<< “ \n”; cout<< “ Upper bound “<< (upper – v,begin( ))<<”\n”; return 0; }
输出结果
如果我们运行上面的代码,它将生成以下输出
Sorted Vector: 18 18 17 17 17 17 16 16 16 13 13 13 Lower bound = 2 Upper bound = 6
#include<iosteam.h> #include<vector.h> Using namespace std; int main ( ){ int vect[ ] = {5,5,5,5,7,7 7,8,8,8,8,9,9,9,10,10} vector<int> v(vect, vect+16); sort (v.begin( ), v.end( )); cout<< “ \n Sorted Vector: ”; for( auto i = vect.begin( ), i =!vect.end( ), ++i) vector<int> iterator low, up; low = lower_bound (v.begin( ), v.end( ), 8); up = upper_bound (v.begin( ), v.end( ), 8); cout<<” Lower bound” << (lower – v.begin( ))<< “ \n”; cout<< “ Upper bound “<< (upper – v,begin( ))<<”\n”; return 0; }
输出结果
如果我们运行上面的代码,它将生成以下输出
Sorted Vector: 10 10 9 9 9 8 8 8 8 7 7 7 5 5 5 5 Lower bound = 5 Upper bound = 9