午夜稻草人

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

ForwardIter lower_bound(ForwardIter first, ForwardIter last,const _Tp& val)算法返回一个非递减序列[first, last)中的第一个大于等于值val的位置。

ForwardIter upper_bound(ForwardIter first, ForwardIter last, const _Tp& val)算法返回一个非递减序列[first, last)中第一个大于val的位置。

lower_bound和upper_bound如下图所示:

 

 

调用时注意,传入的firest 是第一元素的索引,传入的last是最后一个元素下一个元素的索引。

返回时,若所有元素都比targe 小,则返回last

STL 的equal_range是基于lower_bound 和upper_bound实现的

 

#include <iostream>
#include <algorithm>
#include <vector>

using namespace std;

int main(int argc, char** argv)
{

    int arr[] = {3,2,5,4,8,0,9,5,6};

    sort(arr,arr+9);

    cout << lower_bound(arr,arr+9,5)-arr << endl;
    cout << upper_bound(arr,arr+9,5)-arr << endl;

    vector<int> vec;
    vec.push_back(3);
    vec.push_back(2);
    vec.push_back(5);
    vec.push_back(4);
    vec.push_back(8);
    vec.push_back(0);
    vec.push_back(9);
    vec.push_back(5);
    vec.push_back(6);

    sort(vec.begin(), vec.end());

    cout << lower_bound(vec.begin(),vec.end(),5)-vec.begin() << endl;
    cout << upper_bound(vec.begin(),vec.end(),5)-vec.begin() << endl;

    return 0;
}

输出:

4
6
4
6

 

posted on 2015-06-11 14:06  午夜稻草人  阅读(351)  评论(0编辑  收藏  举报