自己实现STL模板upper_bound() 和lower_bound()

本文介绍了如何自己实现STL中的upper_bound()和lower_bound()函数,详细阐述了这两个函数的用法和作用。upper_bound()在非递减序列中找到大于val的最小元素的迭代器位置,而lower_bound()则找到大于等于val的最小元素的迭代器位置。同时指出,在set中可以直接使用s.upper_bound(val)和s.lower_bound(val)。另外,文章提到binary_search()函数在set中并不适用,它用于检查非递减序列中是否存在特定值。
摘要由CSDN通过智能技术生成

一、upper_bound() 

用法upper_bound(iterator,iterator,val)  在set中,还可以s.upper_bound(val);

作用 在一个左闭右开非递减序列中,找一个大于val的最小的数的地址,如果序列中都大于val,返回左区间,都不大于val,返回右区间。

**在一个递增序列[L,R)中,二分查找大于val最小的数*/
template<class F,class T>
F upper_boundSQ(F s,F e,T val)
{
    //if(*s>val)return s;
    F L=s,R=e-1;
    //if(*R<=val)return e;
    while(L<=R)
    {
        F mid=L+(R-L)/2;
        if(L==R&&*mid>val)return mid;
        else if(*mid<=val)
            L=mid+1;
        else
            R=mid-1;
    }
    return L;
}
int main ()
{
    vector<int> a;
    a.push_back(1);
    a.push_back(1);
    a.push_back(2);
    a.push_back(3);
    a.push_back(4);
    a.push_back(5);
    //a.size()=6
    /**upper_b
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值