c语言binsearch函数头文件,C++ binary_search()函数详解
binary_search()函数定义在头文件中,用于查找指定区域内是否包含某个目标元素。
该函数有 2 种语法格式,分别为:
//查找 [first, last) 区域内是否包含 val
bool binary_search (ForwardIterator first, ForwardIterator last,
const T& val);
//根据 comp 指定的规则,查找 [first, last) 区域内是否包含 val
bool binary_search (ForwardIterator first, ForwardIterator last,
const T& val, Compare comp);
其中,first 和 last 都为正向迭代器,[first, last) 用于指定该函数的作用范围;val 用于指定要查找的目标值;comp 用于自定义查找规则,此参数可接收一个包含 2 个形参(第一个形参值为 val)且返回值为 bool 类型的函数,可以是普通函数,也可以是函数对象。
同时,该函数会返回一个 bool 类型值,如果 binary_search() 函数在 [first, last) 区域内成功找到和 val 相等的元素,则返回 true;反之则返回 false。
需要注意的是,由于 binary_search() 底层实现采用的是二分查找的方式,因此该函数仅适用于“已排好序”的序列。所谓“已排好序”,并不是要求 [first, last) 区域内的数据严格按照某个排序规则进行升序或降序排序,只要满足“所有令 element
有关二分查找算法,读者可阅读《二分查找算法》一节。
举个例子:
#include // std::cout
#include // std::binary_search
#include // std::vector
using namespace std;
//以普通函数的方式定义查找规则
bool mycomp(int i, int j) { return i > j; }
//以函数对象的形式定义查找规则
class mycomp2 {
public:
bool operator()(const int& i, const int& j) {
return i > j;
}
};
int main() {
int a[7] = { 1,2,3,4,5,6,7 };
//从 a 数组中查找元素 4
bool haselem = binary_search(a, a + 9, 4);
cout << "haselem:" << haselem << endl;
vectormyvector{ 4,5,3,1,2 };
//从 myvector 容器查找元素 3
bool haselem2 = binary_search(myvector.begin(), myvector.end(), 3, mycomp2());
cout << "haselem2:" << haselem2;
return 0;
}
程序执行结果为:
haselem:1
haselem2:1
此程序中演示了 binary_search() 函数的 2 种适用场景,其中 a[7] 数组中存储的为升序序列;而 myvector 容器中存储的序列虽然整体是乱序的,但对于目标元素 3 来说,所有符合 mycomp2(element, 3) 规则的元素都位于其左侧,不符合的元素都位于其右侧,因此 binary_search() 函数仍可正常执行。
C++ STL标准库给出了 binary_search() 函数底层实现的参考代码(如下所示),感兴趣的读者可自行研究,这里不再赘述:
//第一种语法格式的实现
template
bool binary_search (ForwardIterator first, ForwardIterator last, const T& val)
{
first = std::lower_bound(first,last,val);
return (first!=last && !(val
}
//第二种语法格式的底层实现
template
bool binary_search(ForwardIt first, ForwardIt last, const T& val, Compare comp)
{
first = std::lower_bound(first, last, val, comp);
return (!(first == last) && !(comp(val, *first)));
}
有关 lower_bound() 函数的功能和用法,可阅读《C++ lower_bound()函数》一节;有关 upper_bound() 函数的功能和用法,可阅读《C++ upper_bound()函数》一节。
c语言binsearch函数头文件,C++ binary_search()函数详解相关推荐
- 【C++】C++中的头文件(.h)—详解(2)
接上... [fishing-pan:https://blog.csdn.net/u013921430转载请注明出处] 头文件中写些什么 在上篇博客中写到头文件本身不参与编译,但是它们被包含到源文件中 ...
- 【C++】C++中的头文件(.h)—详解(1)
[fishing-pan:https://blog.csdn.net/u013921430转载请注明出处] 前言 之前写过一篇<C++中头文件的使用>,那篇文章主要讲述C++中头文件的使用 ...
- C语言的头文件和宏定义详解
头文件 头文件,顾名思义就是定义在C语言文件头部的那一坨东西 #include <stdio.h> 这就是一个标准输入输出的头文件声明,头文件声明写在定义文件(后缀名.c的文件)的头部,并 ...
- android常用头文件,Android.mk 使用详解
和你一起终身学习,这里是程序员Android 经典好文推荐,通过阅读本文,您将收获以下知识点:一.Android.mk 简介二.Android.mk 的基本格式三.Android.mk 深入学习一四. ...
- c语言select函数头文件,简述select函数的功能与调用方法
使用select 首先我们需要解答一些疑惑.为什么要使用select函数? 比如你有一个服务器程序,维护着N多个TCP连接,你如何去判断这些TCP连接上有数据传送过来了呢?最傻瓜的办法就是隔一定时间去 ...
- c语言eof的头文件,vc eof函数是在哪个头文件里面
满意答案 winner丶小铭 2013.04.07 采纳率:54% 等级:12 已帮助:9597人 #include 如: #include #include #include #include ...
- c语言中常用函数头文件,c语言中常用的函数和头文件
头文件ctype.h 函数列表 函数类别函数目的详细说明 字符测试为字符和数字的isalnum 是否为isalpha字符 是否控制字符iscntrl 是否为数字isdigit 是否能够显示文字(空格除 ...
- 为什么C语言要有头文件(补充)
1.为什么要有头文件? 为了在组织项目结构的时候,减少大型项目维护成本问题. 2.引用头文件 方法一: 使用#pragmatic once可以包括 1.C头文件 2.所有的变量的声明 3.所有的函数的 ...
- C语言编程规范 — 头文件、函数
0 编码规范说明 0.1 前言 为了提高产品或项目代码质量,软件开发人员编写出简洁.可靠.可维护.可测试.高效.可移植的代码,树立良好的编程规范是非常有必要的,良好的编程规范能提高编程效率,规避很多编 ...
最新文章
- socket有关的一些扩展函数介绍
- 剑指offer64 不能使用乘除法、for、while、if、else、switch、case 求 1+2+...+n
- Java并发编程(1):可重入内置锁
- 做excel的时候要快速按照纬度的角度来分析构建:一个词语“纬度”
- .Net 2.0里有一个有用的新功能:迭代器
- Java静态方法与非静态方法的泛型
- 2017的中国开放_2017年开放科学如何发展
- vue 指令 v-if v-else-if v-else
- 修改Myecclipse servlet/jsp的默认模板
- iframe跨域与session失效问题
- 剑指Offer_16_合并两个排序的链表
- python 谷歌翻译 api_python免费调用谷歌翻译接口
- 网狐棋牌游戏用户数据库QPAccountsDB开发文档
- zemax---透镜基础篇
- 目标客户画像_用户画像是什么?怎么做用户画像?
- 《鬼谷子》飞箝第五(原文)
- 零信任解决方案在某医院落地实例学习记录
- Gradient Descent and NSCA
- 金三银四最新Java面试题总结前199+1页都在这里了,非常详细
- 夏斌:半年宏观调控思路的建议