【C++】从没见过这么详细的lower_bound的讲解

本文详细介绍了C++中的lower_bound函数,包括其函数原型、模板参数解释、作用及参数返回值含义,并通过多个例子展示了如何使用。文章揭示了lower_bound函数必须在有序数组中使用的原因——其底层实现基于二分查找。此外,还探讨了原型二中的比较器参数,以及lower_bound的二分查找实现。最后,提到了upper_bound函数,指出其与lower_bound的区别仅在于比较条件。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

我这两个函数在牛客上做题见到,就充满疑惑这两个函数还有第二种接口??,我上C++官网去学习,例子就一个是最基础的,我看明白了。虽然是两个函数的接口就两个,但是有时候看别人使用的时候,里面参数还可以放不同的仿函数,我懵逼了。就去网上搜,但是大家讲解的都是它的第一个接口。我只能再把文档一遍一遍过,代码一遍遍的尝试,调试。
终于,我花了一天时间把这个函数才终于依靠着调试和 模仿着别人接口的使用,慢慢调弄明白(有可能我比较笨吧)

首先,大家都说用这两个函数之前必须是在有序的数组中,但是都没有说明为什么是在有序的数组,因为他们的底层实现是二分查找(这个也是我在别人的题解的时候知道的)
我们先来看lower_bound(后有lower_bound的底层实现,更容易理解lower_bound的原理)

lower_bound

函数原型:

原型1

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

原型2

template <class ForwardIterator, class T, class Compare>
ForwardIterator lower_bound (ForwardIterator first, ForwardIterator last, const T& val, Compare comp);
模板参数解释:
  1. ForwardIterator就是一个迭代器,vector< int > v,v数组的首元素就是 v.begin()
  2. T&val , 就是一个T类型的变量
  3. Compare 就是一个比较器,可以传仿函数对象,也可以传函数指针
函数作用:

前提是有序的情况下,lower_bound返回指向第一个值不小于val的位置,也就是返回第一个大于等于val值的位置。(通过二分查找)

参数、返回值含义

first,last: 迭代器在排序序列的起始位置和终止位置,使用的范围是[first,last).包括first到last位置中的所有元素
val: 在[first,last)下,也就是区分(找到大于等于val值的位置,返回其迭代器)
comp: 主要针对于原型二,传一个函数对象,或者函数指针,按照它的方式来比较
返回值:返回一个迭代器,指向第一个大于等于val的位置

例子

原型一 例1

#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;

int main()
{
   
   
	vector<int> v= {
   
   3,4,1,2,8};
	//先排序
	sort(v.begin(),v.end()); // 1 2 3 4 8
	
	// 定义两个迭代器变量 
	vector<int>::iterator iter1;
	vector<int>::iterator iter2; 
	
	iter1 = lower_bound(v.begin(),v.end()
评论 12
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值