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

upper_bound, lower_bound

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

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

template
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 v(input, input+12);
    vector::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 v(input, input+12);
    vector::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;
}

你可能感兴趣的:(STL里面的函数(不定期更新))