zoukankan      html  css  js  c++  java
  • STL之lower_bound和upper_bound

    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;
    }
    
  • 相关阅读:
    一个简单的批量更新oracle 数据库中 最近的服务商名称的数据
    sql 分组后显示每组的前几条记录
    基于server broker 的数据实时更新
    Oracle中的三种Join 方式
    weblogic内存调整说明
    TongWeb
    国产数据库助力民航核心交易系统
    weblogic的集群与配置
    项目管理软考
    浮躁的过去,开启的项目管理之路(四)
  • 原文地址:https://www.cnblogs.com/ZhaoxiCheung/p/5455753.html
Copyright © 2011-2022 走看看