C ++中非递增向量的上限和下限

在本文中,我们将讨论在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