STL里面的函数(不定期更新)

upper_bound, lower_bound

这两个函数类似,以upper_bound为例,该函数有两种形式:

template <class ForwardIterator, class T>
ForwardIterator upper_bound (ForwardIterator first, ForwardIterator last, const T& val)

template <class ForwardIterator, class T, class Compare>
ForwardIterator upper_bound (ForwardIterator first, ForwardIterator last,
const T& val, Compare comp);

函数接受两个迭代器 first, last,一个值 val。函数所做的工作如下:以 val 作为上界,在first, last 中寻找一个区间,这个区间的上界就是 val, 显然,这样的区间有很多个,我们要选一个最贴近上界的区间。返回的迭代器就指向这个区间的右边的第一个值。

所谓的大于,小于可以自己定义。lower_bound() 返回以 val 为下界的区间的左端点的迭代器。

  • upper_bound 示例:
int main() {
    int input[] = {1,2,2,3,4,4,5,6,7,8,10,45};
    vector<int> v(input, input+12);
    vector<int>::iterator it1 , it2;

    // points to eight element in v, index from 0 to 11, *it1 = 7
    it1 = upper_bound(v.begin(), v.end(), 6); 
    cout << it1 - v.begin() << endl;

    // points to six element in v, *it2 = 5
    it2 = upper_bound(v.begin(), v.end(), 4);
    cout << it2 - v.begin() << endl;

    return 0;
}
  • lower_bound示例:
int main() {
    int input[] = {1,2,2,3,4,4,5,6,7,8,10,45};
    vector<int> v(input, input+12);
    vector<int>::iterator it1 , it2;

    // points to eight element in v, *it1 = 4 
    it1 = lower_bound(v.begin(), v.end(), 4); 
    cout << *it1 << endl;
    cout << it1 - v.begin() << endl;

    // points to six element in v, *it2 = 10
    it2 = lower_bound(v.begin(), v.end(), 10);
    cout << *it2 << endl;
    cout << it2 - v.begin() << endl;

    return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值