二分法查找c++内置函数
时间: 2025-03-23 17:17:00 浏览: 34
### C++标准库中的二分法查找内置函数
C++标准模板库(STL)提供了多个用于执行二分查找的内置函数,这些函数可以显著简化开发过程并提高代码效率。以下是 `binary_search`、`lower_bound` 和 `upper_bound` 的详细介绍。
#### 1. 函数概述
- **`binary_search`**: 判断目标值是否存在于已排序的序列中[^1]。
- **`lower_bound`**: 查找第一个不小于指定值的位置[^2]。
- **`upper_bound`**: 查找第一个大于指定值的位置[^5]。
以上三个函数均位于 `<algorithm>` 头文件下,并且它们都依赖于输入序列已经按升序排列这一前提条件。
#### 2. 使用方法与参数说明
##### (1) `binary_search`
该函数接受四个主要参数:两个迭代器定义范围以及要搜索的目标值。如果找到,则返回布尔值 true;否则返回 false。
示例代码如下:
```cpp
#include <iostream>
#include <vector>
#include <algorithm>
int main(){
std::vector<int> vec = {1, 3, 5, 7, 9};
bool found = std::binary_search(vec.begin(), vec.end(), 5);
if(found){
std::cout << "Value exists." << std::endl;
}
}
```
##### (2) `lower_bound`
此函数同样接收相同的前两组参数外加一个比较对象或默认操作符来定位不低于给定数目的首个元素索引位置[^3]。
实例展示:
```cpp
std::vector<int>::iterator it_low = std::lower_bound(vec.begin(), vec.end(), 6);
if(it_low != vec.end()){
std::cout << *it_low << std::endl; // 输出7
}
```
##### (3) `upper_bound`
它的工作方式类似于 `lower_bound` ,只是寻找的是严格超过设定阈值的那个点位。
例子呈现:
```cpp
std::vector<int>::iterator it_upp = std::upper_bound(vec.begin(), vec.end(), 6);
if(it_upp != vec.end()){
std::cout << *it_upp << std::endl; // 输出7
}
```
注意,在实际应用过程中,当数据量较大或者性能敏感度较高时,推荐优先选用基于指针运算形式而非容器成员访问模式来进行上述三种算法调用,因为这样能有效减少不必要的内存分配动作带来的额外负担。
### 结论
综上所述,通过合理运用 STL 提供的标准工具集里的这几个高效实用的功能模块,我们可以轻松完成各种复杂场景下的快速检索需求,同时还能极大地提升程序运行速度和稳定性表现。
阅读全文
相关推荐


















