下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
c++二分查找库函数二分查找也叫折半查找,是一种在有序数组中快速定位目标值的常用算法。C++标准库提供了二分查找的库函数`binary_search`和`lower_bound`、`upper_bound`、`equal_range`三个相关函数。
1.`binary_search`函数:
`binary_search(first,last,value)`函数用来判断有序范围`[first,last)`是否包含了目标值`value`,返回一个bool值。它首先会用二分查找算法找到`value`可能出现的位置,然后返回`true`或者`false`。
```cpp
#include<algorithm>
#include<iostream>
#include<vector>
intmain(){
std::vector<int>nums{1,2,3,4,5,6,7,8,9};
intvalue=6;
if(std::binary_search(nums.begin(),nums.end(),value)){
std::cout<<"Found"<<value<<"inthevector."<<std::endl;
}else{
std::cout<<"Cannotfind"<<value<<"inthevector."<<std::endl;
}
return0;
}
```
2.`lower_bound`函数:
`lower_bound(first,last,value)`函数用来在有序范围`[first,last)`中寻找第一个大于或等于目标值`value`的位置,返回一个迭代器。如果没有找到满足条件的元素,返回`last`。可以通过迭代器的差值来得到目标值在容器中的索引。
```cpp
#include<algorithm>
#include<iostream>
#include<vector>
intmain(){
std::vector<int>nums{1,2,3,4,5,6,7,8,9};
intvalue=6;
autoit=std::lower_bound(nums.begin(),nums.end(),value);
if(it!=nums.end()){
intindex=std::distance(nums.begin(),it);
std::cout<<"Found"<<value<<"atindex"<<index<<"."<<std::endl;
}else{
std::cout<<"Cannotfind"<<value<<"inthevector."<<std::endl;
}
return0;
}
```
3.`upper_bound`函数:
`upper_bound(first,last,value)`函数用来在有序范围`[first,last)`中寻找第一个大于目标值`value`的位置,返回一个迭代器。如果没有找到满足条件的元素,返回`last`。可以通过迭代器的差值来得到目标值在容器中的索引。
```cpp
#include<algorithm>
#include<iostream>
#include<vector>
intmain(){
std::vector<int>nums{1,2,3,4,5,6,7,8,9};
intvalue=6;
autoit=std::upper_bound(nums.begin(),nums.end(),value);
if(it!=nums.end()){
intindex=std::distance(nums.begin(),it);
std::cout<<"Found"<<value<<"atindex"<<index<<"."<<std::endl;
}else{
std::cout<<"Cannotfind"<<value<<"inthevector."<<std::endl;
}
return0;
}
```
4.`equal_range`函数:
`equal_range(first,last,value)`函数用来在有序范围`[first,last)`中查找与目标值`value`相等的元素,并返回一个包含两个迭代器的pair对象,分别表示第一个匹配的元素和最后一个匹配的元素的后一个位置。如果没有找到满足条件的元素,两个迭代器都指向目标值应该插入的位置。
```cpp
#include<algorithm>
#include<iostream>
#include<vector>
intmain(){
std::vector<int>nums{1,2,3,4,5,6,6,6,7,8,9};
intvalue=6;
std::pair<std::vector<int>::iterator,std::vector<int>::iterator>range;
range=std::equal_range(nums.begin(),nums.end(),value);
if(range.first!=range.second){
intstart=std::distance(nums.begin(),range.first);
intend=std::distance(nums.begin(),range.second);
std::cout<<"Found"<<value<<"betweenindex"<<start<<"and"<<end-1<<"."<<std::endl;
}else{
std::cout<<"Can
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 专用设备制造加工服务费协议样本版B版
- 11拧螺丝 说课稿-2023-2024学年科学二年级下册苏教版
- 揭秘文学之魅
- 6 观察与比较 说课稿-2024-2025学年科学一年级上册教科版
- 供应链优化管理与合作服务合同
- 二手房屋买卖补充协议范本
- 长期租赁车辆协议书
- 蔬菜配送合同模板
- 专属工作任务承揽协议一
- 互联网科技企业战略合作框架协议
- 江苏省苏州市昆山、太仓、常熟、张家港四市2024-2025学年九年级上学期期末阳光测试道法卷(含答案)
- 温湿度记录管理制度模版(3篇)
- 二年级数学两位数加两位数计算题同步检测训练题
- 2025的委托拍卖合同范本
- 弹性模量自动生成记录
- 老年痴呆患者安全护理
- 管理制度医疗器械质量管理制度
- 颅脑损伤的高压氧治疗
- 公司章程模板五篇
- 汽车行走的艺术学习通超星期末考试答案章节答案2024年
- 2025届山东省菏泽市部分重点学校高一上数学期末统考模拟试题含解析
评论
0/150
提交评论