lower_bound()函数和upper_bound()函数

1、lower_bound()函数
在不破坏排序状态的原则下,可插入value的第一个位置
template<class ForwardIt, class T>
ForwardIt lower_bound(ForwardIt first, ForwardIt last, const T& value)
{
    ForwardIt it;
    typename std::iterator_traits<ForwardIt>::difference_type count, step;
    count = std::distance(first, last);
 
    while (count > 0) { //因为序列是有序的,因此执行二分查找
        it = first; 
        step = count / 2; 
        std::advance(it, step); //前进step步
        if (*it < value) { //大于才进入右区间,等于都应该进入左区间,因为是求第一个位置</span><span style="font-size: 22px;">
            first = ++it; 
            count -= step + 1; 
        }
        else //进入左区间
            count = step;
    }
    return first;
}

2、upper_bound()函数
在不破坏排序状态的原则下,可插入value的最后一个合适位置
template<class ForwardIt, class T>
ForwardIt upper_bound(ForwardIt first, ForwardIt last, const T& value)
{
    ForwardIt it;
    typename std::iterator_traits<ForwardIt>::difference_type count, step;
    count = std::distance(first,last);
 
    while (count > 0) { //因为序列是有序的,因此执行二分查找</span><span style="font-size: 22px;">
        it = first; 
        step = count / 2; //中间
        std::advance(it, step); //前进step步
        if (!(value < *it)) {  //进入右区间,大于等于都进入右区间,因为是求最后一个满足条件的位置</span><span style="font-size: 22px;">
            first = ++it;
            count -= step + 1;
        } else count = step;
    }
    return first;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值