STL之lower_bound和upper_bound
2016-05-03 18:11
369 查看
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:
函数lower_bound()在first和last中的前闭后开区间进行二分查找,返回大于或等于val的第一个元素位置。如果所有元素都小于val(插入元素),则返回last的位置,且last的位置是越界的。
源代码:
//这个算法中,first是最终要返回的位置 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; //在右边子序列中查找 } else len = half; //在左边子序列(包含middle)中查找 } return first; }
upper_bound:
函数upper_bound()在first和last中前闭后开区间进行二分查找,返回最后一个大于等于val的元素的位置。如果所有元素小于val(插入元素),则返回last的位置,且last的位置是越界的。
源代码:
int upper_bound(int *array, int size, int key) { int first = 0, len = size-1; int half, middle; while(len > 0){ half = len >> 1; middle = first + half; if(array[middle] > key) //中位数大于key,在包含last的左半边序列中查找。 len = half; else{ first = middle + 1; //中位数小于等于key,在右半边序列中查找。 len = len - half - 1; } } return first; }
相关文章推荐
- 【C#设计模式-享元模式】
- Objective-C中instancetype详解
- STL之lower_bound和upper_bound
- ThinkPHP Seesion的Memcached驱动支持阿里云OCS及集群
- Python制作统计图形
- UDP vs. TCP
- JSON.parse()和JSON.stringify()
- 大声的喊——NOI2016,我来了!
- 解析Mac OS下部署Pyhton的Django框架项目的过程
- Qt开发笔记
- android listview.onDraw中绘制的内容不在最顶层
- cdoj1325卿学姐与基本法
- Android开发环境配置
- Android屏幕适配全攻略(最权威的官方适配指导)
- JavaScript冒泡排序算法
- git分支操作整理
- Adding DTrace Probes to PHP Extensions
- Python基于pandas的数据处理(二)
- Android监听系统短信数据库变化-提取短信内容
- Protocol Buffer技术详解(语言规范)