C++ STL upper_bound和lower_bound

现有一个不递减的序列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;

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

发布了76 篇原创文章 · 获赞 64 · 访问量 9335

猜你喜欢

转载自blog.csdn.net/hesorchen/article/details/104518057