算法-二分查找2(代码笔记)
void LowerBound() {
t("lower_bound");
/*
lower_bound的主要作用是返回一个迭代器,指向第一个 *不小于* 给定值(称为value)的元素。
如果所有元素都不大于value(即所有元素都小于或等于value),则返回指向范围末尾的迭代器。
语法:lower_bound(开始位置,结束位置的下一个位置,要查找的值);
位置:数组元素位置用数组名+下标表示,向量数组vector用.begin()/.end()表示
*/
int a[] = {1, 2, 2, 2, 3, 4, 5};
int n = 7;
int value = 6;// 0-0; 2-1; 5-6; 6-7
// 使用 lower_bound 查找第一个不小于 value 的元素
auto it = lower_bound(a, a+n, value);
cout << (it-a);
}
void UpperBound() {
t("upper_bound");
/*
upper_bound的主要作用是返回一个迭代器,指向第一个 *大于* 给定值(称为value)的元素。
如果所有元素都不大于value(即所有元素都小于或等于value),则返回指向范围末尾的迭代器。
语法:upper_bound(开始位置,结束位置的下一个位置,要查找的值);
位置:数组元素位置用数组名+下标表示,向量数组vector用.begin()/.end()表示
*/
int a[] = {1, 2, 2, 2, 3, 4, 5};
int n = 7;
int value = 2;// 0-0; 1-1;2-4;5-7;6-7
// 使用 upper_bound 查找第一个大于 value 的元素
auto it = upper_bound(a, a+n, value);
cout << (it-a);
vector<int> vec = {1, 2, 2, 2, 3, 4, 5};
value = 0; // 0-0; 1-1;2-4;5-7;6-7
// 使用 upper_bound 查找第一个大于 value 的元素
auto it2 = upper_bound(vec.begin(), vec.end(), value);
cout << (it2-vec.begin()) << endl;
}