Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C++

ขอบเขตบนและขอบเขตล่างสำหรับเวกเตอร์ที่ไม่เพิ่มขึ้นใน C++


ในบทความนี้ เราจะพูดถึง vector::upper_bound() และ vector::lower_bound() สำหรับอาร์เรย์ที่เรียงลำดับแบบไม่เพิ่มขึ้นใน C++ STL

เวกเตอร์คล้ายกับไดนามิกอาร์เรย์ พวกมันมีความสามารถในการปรับเปลี่ยนขนาดของมันเองเมื่อใดก็ตามที่มีค่าถูกแทรกเข้าไปในหรือลบออกจากคอนเทนเนอร์ที่เราจัดเก็บค่านั้นไว้

ในเวกเตอร์ ขอบเขตล่างจะส่งกลับตัววนซ้ำที่ชี้ไปยังองค์ประกอบแรกในช่วงที่ไม่เปรียบเทียบค่าที่กำหนด Upper Bound ส่งคืนองค์ประกอบตัวชี้แบบ iterator ในช่วงที่น้อยกว่าค่าที่กำหนด

ป้อนข้อมูล

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