下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2020国控私募基金招聘笔试内部押题卷附标准答案
- 2020中专解剖学易考题型试题及对应答案速查表
- 2024年病媒生物防控知识考试题库及答案
- 2026九年级上新课标生活用电安全
- 教学材料《会计》-第三章
- 《微观经济学》-第7 章 不完全竞争市场
- 第二节 用开源硬件制作机器人教学设计初中信息技术粤高教版B版九年级下册-粤高教版B版
- 2026六年级数学下册 负数重点拓展
- 2026六年级道德与法治下册 共建美好地球家园
- 三年级道德与法治下册 第四单元 多样的交通和通信 12《慧眼看交通》教学设计 新人教版
- 河道整治工程交通保通协调方案
- 建筑施工应急预案范文完整版
- “一带一路”与中国企业社会责任(广东外语外贸大学)知到智慧树网课答案
- 2026届高考数学复习策略课件
- 国寿股权投资有限公司笔试题库
- 农村自媒体知识培训内容课件
- 中学生入团汇报
- 电梯安装施工安全风险评估
- 厨师原料上浆技术培训
- 2025年商务部直属事业单位第二批招聘工作人员(169人)笔试备考试题及答案详解(真题汇编)
- 警务面试实战题库:河北篇
评论
0/150
提交评论