C++中非遞減向量的上界和下界


本文將討論在 C++ STL 中對非遞減排序陣列使用 vector::upper_bound() 和 vector::lower_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

更新於:2020年8月14日

4K+ 次瀏覽

啟動你的職業生涯

完成課程獲得認證

開始學習
廣告