📅  最后修改于: 2023-12-03 14:49:48.002000             🧑  作者: Mango
当我们需要在一个排序后的数组中查找某些元素的位置时,C++ STL提供了许多常用的函数来简化我们的代码。其中,我们可以使用lower_bound和upper_bound函数来查找数组的底部和顶部。
lower_bound函数用于查找第一个大于等于某个值的元素的迭代器。在一个有序序列中,可以用lower_bound函数快速地找到第一个大于等于某个值的元素的位置。
以下是lower_bound函数的语法:
auto lower_bound (ForwardIt first, ForwardIt last, const T& value);
其中,first和last是迭代器范围,指向查找序列的开头和结尾。value是要查找的值。
下面是一个使用lower_bound函数查找数组底部的例子:
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int main() {
vector<int> arr{1, 2, 3, 4, 5};
auto it = lower_bound(arr.begin(), arr.end(), 3);
if (it != arr.end()) {
cout << "底部元素的位置是: " << it - arr.begin() << endl;
}
return 0;
}
输出结果:底部元素的位置是: 2
upper_bound函数用于查找第一个大于某个值的元素的迭代器。在一个有序序列中,可以用upper_bound函数快速地找到第一个大于某个值的元素的位置。
以下是upper_bound函数的语法:
auto upper_bound (ForwardIt first, ForwardIt last, const T& value);
其中,first和last是迭代器范围,指向查找序列的开头和结尾。value是要查找的值。
下面是一个使用upper_bound函数查找数组顶部的例子:
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int main() {
vector<int> arr{1, 2, 3, 4, 5};
auto it = upper_bound(arr.begin(), arr.end(), 3);
if (it != arr.end()) {
cout << "顶部元素的位置是: " << it - arr.begin() << endl;
}
return 0;
}
输出结果:顶部元素的位置是: 3
注意,当要查找的值不存在于序列中时,lower_bound和upper_bound函数返回的都是查找值应该插入的位置的迭代器,而非NULL指针。
上述程序均使用了vector容器,不仅仅是为了方便操作,也可以通过使用vector容器的方法来验证查找结果是否正确。
以上就是使用C++ STL查找排序后的数组的底面和天花板的介绍。