关于lower_bound函数的一些理解

参考:lower_bound - C++ Reference

函数功能:返回一个迭代器,该迭代器指向区间内第一个不小于val的元素,如果没有,就返回end。可以理解为返回的是下界。

两种形式:

第一个版本使用默认的 < 进行比较:

template 
	ForwardIterator lower_bound (ForwardIterator first, ForwardIterator last, const T& val);

第二个版本使用自定义的 comp进行比较:

template 
  	ForwardIterator lower_bound (ForwardIterator first, ForwardIterator last, 
  																	const T& val, Compare comp);

函数内部实现就是简单的二分查找:

template 
ForwardIterator lower_bound (ForwardIterator first, ForwardIterator last, const T& val){
    ForwardIterator it;
    iterator_traits::difference_type count, step;
    count = distance(first,last);
    while (count>0){
        it = first; step=count/2; advance (it,step);
        if (*it

这儿的重点放在自定义的比较函数,因为很多时候我们自己会去写这个函数。

comp:

Binary function that accepts two arguments (the first of the type pointed by ForwardIterator, and the second, always val), and returns a value convertible to bool. The value returned indicates whether the first argument is considered to go before the second.
The function shall not modify any of its arguments.
This can either be a function pointer or a function object.

注意:

  • 两个参数,第一个指向迭代器对应元素,第二个是传入的val,一定不要弄错。
  • comp我们一般可以写成普通bool函数、仿函数或者lambda表达式,或者可以重载 <运算符。

可以参考这儿:C++仿函数和Lambda表达式_bajianxiaofendui的博客-CSDN博客

举个例子:646. 最长数对链 - 力扣(LeetCode)

你可能感兴趣的:(c++,数据结构与算法,c++)