STL源码剖析之算法:lower_bound
lower_bound()函数返回能够插入value的第一个位置,该函数要求目标序列必须是有序的。
- template <class ForwardIterator, class T>
- inline ForwardIterator lower_bound(ForwardIterator first,
- ForwardIterator last,
- const T &value) {
- return __lower_bound(first, last, value,
- distance_type(first), iterator_category(first));
- }
- // forward iterator 版本
- template <class ForwardIterator, class T, class Distance>
- ForwardIterator __lower_bound(ForwardIterator first,
- ForwardIterator last,
- const T &value,
- Distance*,
- forward_iterator_tag) {
- Distance len = 0;
- distance(first, last, len);
- Distance half;
- ForwardIterator middle;
- while(len > 0) {
- half = len >> 1;
- advance(middle, half);
- if(*middle < value) {
- first = middle;
- ++first;
- len = len - half - 1;
- } else
- len = half;
- }
- return first;
- }
- // random access iterator 版本
- template <class RandomAccessIterator, class T, class Distance>
- RandomAccessIterator __lower_bound(RandomAccessIterator first,
- RandomAccessIterator last,
- const T &value,
- Distance*,
- random_access_iterator_tag) {
- Distance len = last - first;
- Distance half;
- RandomAccessIterator middle;
- while(len > 0) {
- half = len >> 1;
- middle = first + half;
- if(*middle < value) {
- first = middle + 1;
- len = len - half - 1;
- } else
- len = half;
- }
- return first;
- }
转载于:https://blog.51cto.com/zxn990/1172873
STL源码剖析之算法:lower_bound相关推荐
- STL源码剖析 基本算法 < stl_algobase.h >
注意事项 : 实际使用的时候,使用的是<algorithm>这个头文件,不是题目中的< stl_algobase.h > equal函数 如果两个序列在[firsLlast) ...
- STL源码剖析 基本算法 equal | fill | iter_awap | lexicographical_compare | max | min | swap |mismatch
Equal 两个序列在[first,last)区间内相等,equal()返回true.以第一个序列作为基准,如果第二序列元素多不予考虑,如果要保证两个序列完全相等需要比较元素的个数 if(vec1.s ...
- STL源码剖析 数值算法 copy 算法
copy复制操作,其操作通过使用assignment operator .针对使用trivial assignment operator的元素型别可以直接使用内存直接复制行为(使用C函数 memove ...
- STL源码剖析 算法开篇
STL源码剖析 算法章节 算法总览_CHYabc123456hh的博客-CSDN博客 质变算法 质变算法 - 会改变操作对象的数值,比如互换.替换.填写.删除.排列组合.分隔.随机重排.排序等 #in ...
- 【STL源码剖析】list模拟实现 | 适配器实现反向迭代器【超详细的底层算法解释】
今天博主继续带来STL源码剖析专栏的第三篇博客了! 今天带来list的模拟实现! 话不多说,直接进入我们今天的内容! 前言 那么这里博主先安利一下一些干货满满的专栏啦! 手撕数据结构https://b ...
- STL源码剖析(十三)关联式容器之rb_tree
STL源码剖析(十三)关联式容器之rb_tree 文章目录 STL源码剖析(十三)关联式容器之rb_tree 一.rb_tree的数据结构 二.rb_tree的迭代器 三.rb_tree的操作 3.1 ...
- STL(C++标准库,体系结构及其内核分析)(STL源码剖析)(更新完毕)
文章目录 介绍 Level 0:使用C++标准库 0 STL六大部件 0.1 六大部件之间的关系 0.2 复杂度 0.3 容器是前闭后开(左闭右开)区间 1 容器的结构与分类 1.1 使用容器Arra ...
- 《STL源码剖析》学习--6章--_rotate算法分析
最近在看侯捷的<STL源码剖析>,其中有许多不太明白之处,后经分析或查找资料有了些理解,现记录一下. <STL源码剖析>学习--6章--random access ite ...
- 《STL源码剖析》学习--6章--power算法分析
最近在看侯捷的<STL源码剖析>,其中有许多不太明白之处,后经分析或查找资料有了些理解,现记录一下. 6章--power算法分析 书本中的算法如下所示: template <clas ...
最新文章
- 【洛谷 1345】 奶牛的电信
- YTU 2917: Shape系列-3
- VMware下主机与虚拟机通信问题
- 《A First Course in Probability》-chape4-离散型随机变量-几种典型分布列
- java实验10流_实验9 Java输入输出流
- 计算机数学基础 视频讲解,计算机数学基础课件
- mysql修改数据库与级别_数据库MySQL查看和修改事务隔离级别的实例讲解
- android studio x5,android studio中使用x5 webview来读写cookies的问题
- 高中信息技术python知识点_高中信息技术《Python语言》模块试卷
- CSDN首页 云计算 孙玄:解析58同城典型技术架构及演变
- 7 个优秀的 WordPress 倒计时插件
- 微信红包软件可测试,微信抢红包神器测试g2020
- java笑话_[转]爆笑程序员的笑话集锦
- 【AJAX 教程】Jquery 实现 AJAX 请求的三种方式
- Ecshop3.x漏洞复现
- 团队合作难,归根到底是老板领导力不行
- 微淼联合创始人孙延芳:以合规为第一要义,做财商教育“正规军”
- java判断车牌号正确性
- PHP连接MSSQL Server的类
- 如何交换数据:10 分钟为 MQL5 创建 DLL