现有一个不递减的序列a[10] = {1, 1, 1, 3, 3, 5, 5, 5, 5, 6}

数组元素n=10;

upper_bound(a,a+n,k)

返回容器中第一个大于k的元素的地址

lower_bound(a,a+n,k)

返回容器中第一个大于等于k的元素的地址


没错,两个函数的区别就是lower_bound多了个等于


需要注意的是函数返回的都是元素地址

因此,这样就可以直接打印出元素。。

    cout << *upper_bound(a, a + 10, 3) << endl;
    cout << *lower_bound(a, a + 10, 3) << endl;

若要返回数组下标,只要

    cout << upper_bound(a, a + 10, 3) - a << endl;
    cout << lower_bound(a, a + 10, 3) - a << endl;

其实两个函数原理都是简单二分,因此自己写一下也挺方便的… …

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐