lower_bound()函数返回能够插入value的第一个位置,该函数要求目标序列必须是有序的。

  1. template <class ForwardIterator, class T>
  2. inline ForwardIterator lower_bound(ForwardIterator first,
  3. ForwardIterator last,
  4. const T &value) {
  5. return __lower_bound(first, last, value,
  6. distance_type(first), iterator_category(first));
  7. }
  1. // forward iterator 版本
  2. template <class ForwardIterator, class T, class Distance>
  3. ForwardIterator __lower_bound(ForwardIterator first,
  4. ForwardIterator last,
  5. const T &value,
  6. Distance*,
  7. forward_iterator_tag) {
  8. Distance len = 0;
  9. distance(first, last, len);
  10. Distance half;
  11. ForwardIterator middle;
  12. while(len > 0) {
  13. half = len >> 1;
  14. advance(middle, half);
  15. if(*middle < value) {
  16. first = middle;
  17. ++first;
  18. len = len - half - 1;
  19. } else
  20. len = half;
  21. }
  22. return first;
  23. }
  1. // random access iterator 版本
  2. template <class RandomAccessIterator, class T, class Distance>
  3. RandomAccessIterator __lower_bound(RandomAccessIterator first,
  4. RandomAccessIterator last,
  5. const T &value,
  6. Distance*,
  7. random_access_iterator_tag) {
  8. Distance len = last - first;
  9. Distance half;
  10. RandomAccessIterator middle;
  11. while(len > 0) {
  12. half = len >> 1;
  13. middle = first + half;
  14. if(*middle < value) {
  15. first = middle + 1;
  16. len = len - half - 1;
  17. } else
  18. len = half;
  19. }
  20. return first;
  21. }

转载于:https://blog.51cto.com/zxn990/1172873

STL源码剖析之算法:lower_bound相关推荐

  1. STL源码剖析 基本算法 < stl_algobase.h >

    注意事项 : 实际使用的时候,使用的是<algorithm>这个头文件,不是题目中的< stl_algobase.h > equal函数 如果两个序列在[firsLlast) ...

  2. STL源码剖析 基本算法 equal | fill | iter_awap | lexicographical_compare | max | min | swap |mismatch

    Equal 两个序列在[first,last)区间内相等,equal()返回true.以第一个序列作为基准,如果第二序列元素多不予考虑,如果要保证两个序列完全相等需要比较元素的个数 if(vec1.s ...

  3. STL源码剖析 数值算法 copy 算法

    copy复制操作,其操作通过使用assignment operator .针对使用trivial assignment operator的元素型别可以直接使用内存直接复制行为(使用C函数 memove ...

  4. STL源码剖析 算法开篇

    STL源码剖析 算法章节 算法总览_CHYabc123456hh的博客-CSDN博客 质变算法 质变算法 - 会改变操作对象的数值,比如互换.替换.填写.删除.排列组合.分隔.随机重排.排序等 #in ...

  5. 【STL源码剖析】list模拟实现 | 适配器实现反向迭代器【超详细的底层算法解释】

    今天博主继续带来STL源码剖析专栏的第三篇博客了! 今天带来list的模拟实现! 话不多说,直接进入我们今天的内容! 前言 那么这里博主先安利一下一些干货满满的专栏啦! 手撕数据结构https://b ...

  6. STL源码剖析(十三)关联式容器之rb_tree

    STL源码剖析(十三)关联式容器之rb_tree 文章目录 STL源码剖析(十三)关联式容器之rb_tree 一.rb_tree的数据结构 二.rb_tree的迭代器 三.rb_tree的操作 3.1 ...

  7. STL(C++标准库,体系结构及其内核分析)(STL源码剖析)(更新完毕)

    文章目录 介绍 Level 0:使用C++标准库 0 STL六大部件 0.1 六大部件之间的关系 0.2 复杂度 0.3 容器是前闭后开(左闭右开)区间 1 容器的结构与分类 1.1 使用容器Arra ...

  8. 《STL源码剖析》学习--6章--_rotate算法分析

     最近在看侯捷的<STL源码剖析>,其中有许多不太明白之处,后经分析或查找资料有了些理解,现记录一下. <STL源码剖析>学习--6章--random access ite ...

  9. 《STL源码剖析》学习--6章--power算法分析

    最近在看侯捷的<STL源码剖析>,其中有许多不太明白之处,后经分析或查找资料有了些理解,现记录一下. 6章--power算法分析 书本中的算法如下所示: template <clas ...

最新文章

  1. 【洛谷 1345】 奶牛的电信
  2. YTU 2917: Shape系列-3
  3. VMware下主机与虚拟机通信问题
  4. 《A First Course in Probability》-chape4-离散型随机变量-几种典型分布列
  5. java实验10流_实验9 Java输入输出流
  6. 计算机数学基础 视频讲解,计算机数学基础课件
  7. mysql修改数据库与级别_数据库MySQL查看和修改事务隔离级别的实例讲解
  8. android studio x5,android studio中使用x5 webview来读写cookies的问题
  9. 高中信息技术python知识点_高中信息技术《Python语言》模块试卷
  10. CSDN首页 云计算 孙玄:解析58同城典型技术架构及演变
  11. 7 个优秀的 WordPress 倒计时插件
  12. 微信红包软件可测试,微信抢红包神器测试g2020
  13. java笑话_[转]爆笑程序员的笑话集锦
  14. 【AJAX 教程】Jquery 实现 AJAX 请求的三种方式
  15. Ecshop3.x漏洞复现
  16. 团队合作难,归根到底是老板领导力不行
  17. 微淼联合创始人孙延芳:以合规为第一要义,做财商教育“正规军”
  18. java判断车牌号正确性
  19. PHP连接MSSQL Server的类
  20. 如何交换数据:10 分钟为 MQL5 创建 DLL

热门文章

  1. 取代Python多进程!伯克利开源分布式框架Ray
  2. 一步步写一个符合Promise/A+规范的库
  3. oracle创建用户、表空间、临时表空间、分配权限步骤详解
  4. 迪普科技:G20峰会背后的网络安全守护者
  5. 《DBA修炼之道:数据库管理员的第一本书》——1.2节独特的优势
  6. php基础:switch cass控制结构 代替if
  7. Java遍历Map对象的四种方法
  8. About Javascript MVC
  9. 走近酷点KoolPoint,让我们深度挖掘网管软件的设计细节
  10. 程序人生:外链建设流程与细节都有哪些