STL中关于二分查找的函数有三个lower_bound 、upper_bound 、binary_search 。
这三个函数都运用于有序区间(当然这也是运用二分查找的前提),下面记录一下这两个函数。

ForwardIter lower_bound(ForwardIter first, ForwardIter last,const _Tp& val)算法返回一个非递减序列[first, last)中的第一个大于等于值val的位置。

ForwardIter upper_bound(ForwardIter first, ForwardIter last, const _Tp& val)算法返回一个非递减序列[first, last)中的第一个大于值val的位置。

lower_bound和upper_bound如下图所示:

1.lower_bound函数源代码:

int lower_bound(int *array,int size,int key)
{int first=0,middle;int half,len;len=size;while(len>0){half=len>>1;middle=first+half;if(array[middle]<key){first=middle+1;len=len-half-1;///在右边子序列中查找}elselen=half;///在左边子序列(包含middle)中查找}return first;
}

2.upper_bound函数源代码:

int upper_bound(int *array,int size,int key)
{int len=size-1;int half,middle;while(len>0){half=lem>>1;middle=first+half;if(array[middle]>key)///中位数大于key,在包含last的左半边序列中查找。len=half;else{first=middle+1;///中位数小于等于key,在右半边序列中查找。len=len-half-1;}}retrurn first;
}

转载于:https://www.cnblogs.com/nanfenggu/p/7899991.html

STL 二分查找 upper_bound和lower_bound用法相关推荐

  1. c++ 二分查找的函数 lower_bound upper_bound binary_search

    简介 C++ STL 中二分查找函数主要有这三种: lower_bound() upper_bound() binary_search() 这三个函数都运用于有序区间. 用法 1. lower_bou ...

  2. upper_bound和lower_bound用法(史上最全)

    目录 基础用法 用greater<type>()重载 进阶用法(自定义匿名函数) upper_bound进阶 lower_bound进阶 所有代码 两者都是定义在头文件<algori ...

  3. upper_bound和lower_bound用法

    两个函数的用法类似,在一个左闭右开的有序区间里进行二分查找,需要查找的值由第三个参数给出.     对于upper_bound来说,返回的是被查序列中第一个大于查找值的指针,也就是返回指向被查值> ...

  4. 关于二分查找及其上下界问题的一些思考

    个人认为在编程的时候,我的代码能力应该是到位的,但是昨天参加的某公司笔试彻底把这个想法给终结了,才意识到自己是多么的弱.其中印象最深刻的是一道关于二分查找上下界的问题.当时洋洋得意,STL 分分钟搞定 ...

  5. 数据结构(一)STL二分法查找实现及上下界

    一.二分查找思想 在有序表中查找元素常常使用二分查找(Binary Search),有时也译为折半查找,它的基本思想就像是"猜数字游戏":你在心里想一个不超过1000的正整数,我可 ...

  6. lower_bound用法

    lower_bound的headfile是algorithm. lower_bound的工作原理就是二分查找了. lower_bound的作用: lower_bound的返回值减去数组的地址就是 要查 ...

  7. STL之lower_bound,upper_bound二分查找函数 结构体

    codeforces上的代码是开放的,常常就能看到本渣与大神们的差距 比如二分查找... 1.在数组中,找出第一个4所在位置 输入: 14 4 1 2 2 3 4 4 4 4 5 6 7 9 9 10 ...

  8. 二分查找、upper_bound、lower_bound

    整理及总结二分查找的判断和边界细节 修改版 package com.leej.binarysearch;import java.util.Arrays;/*** @author jerry* @cre ...

  9. 【ACM】Uva 1152 (4 Values whose Sum is 0) 二分查找lower_bound() 和upper_bound()的使用

    [问题描述] The SUM problem can be formulated as follows: given four lists A, B, C, D of integer values, ...

最新文章

  1. 给热爱学习的同学们推荐一些顶级的c# Blogs链接
  2. php中对MYSQL操作之事务控制,回滚
  3. OLTP系统的Oracle RAC性能调优,索引分区极大提升提交性能
  4. 面试官 100% 会严刑拷打的 CMS 垃圾回收器,下次面试就拿这篇文章怼回去!
  5. Csharp 打印Word文件默認打印機或選擇打印機設置代碼
  6. 请求网页时,怎么给我返回了一段 JavaScript 代码
  7. 机器人正运动学(3)—— 坐标系及其变换
  8. Docker 安装 CentOS7
  9. Microsoft SQL Server 2000 简体中文企业版 +SP4升级补丁
  10. 《决战大数据》读书笔记(一) 收集数据和使用数据要有关联
  11. 松下A6伺服速度控制模式
  12. 基于ROS设计一款机械臂控制系统 [转发]
  13. PCF8563模块不走时(海振电子PCF8653模块)
  14. 美版iphone更新系统无服务器,无法连接iphone软件更新服务器【应对攻略】
  15. Day 29 - AWS Lambda 接收参数查询 Dynamodb
  16. python 标准输入设备,实时获取MIDI设备的输入(Python)
  17. 【python教程入门学习】Python 集成开发环境(IDE): VS Code
  18. 那些年,我们一起吃得泡面……
  19. 系统设计-网关(一)
  20. ThoughtWorks给你不一样的入职之旅

热门文章

  1. S3C2440启动代码分析
  2. 使用钉钉接收gitlab仓库的推送消息
  3. 智能指针——unique_ptr
  4. 记录 之 tensorflow中几个常用的函数:tf.unstack,tf.concat() 和 tf.stack() 等
  5. Linux永久挂载新的硬盘
  6. apex图表使用饼图居中_echarts饼图标题居中以及调整主副标题的间距、字号
  7. Leetcode题库 32.从上到下打印二叉树(层次遍历 C实现)
  8. matlab朴素贝叶斯工具箱,朴素贝叶斯分类matlab实现.doc
  9. Java语言语法语义分析器设计与实现
  10. 西伯利亚(Siberia)冷空气