[C++ STL algorithm] lower_bound、upper_bound、unique的本质
- lower_bound:返回第一個大于等于查找值的地址
- upper_bound:返回第一個嚴格大于查找值的地址
使用這兩個函數需要的頭文件
#include <algorithm> using namespace std;要求數組必須是有序/單調的
 
lower_bound
lower_bound( a + 1, a + n + 1, x );意義:查找數組aaa中[1,n+1)[1,n+1)[1,n+1)區間第一個大于等于xxx的值的地址
upper_bound
upper_bound( a + 1, a + n + 1, x );意義:查找數組aaa中[1,n+1)[1,n+1)[1,n+1)區間第一個大于xxx的值的地址
lower_bound,upper_boundlower\_bound,upper\_boundlower_bound,upper_bound和sortsortsort一樣都是前閉后開的
以lower_boundlower\_boundlower_bound為例
 upper_boundupper\_boundupper_bound是一樣的
如果想要的是第一個大于等于xxx的下標,可以減去數組名即可
lower_bound( a + 1, a + n + 1, x ) - a;①:
 不管查詢的區間是哪到哪,返回的下標的永遠是整個數組從000開始計算的下標
舉個例子:
 數組:0 1 3 5 7 14
 詢問數組的第2項到第4項第一個大于等于1的下標
 即3 5 7中第一個大于等于1的——3的下標為2
 ②:
 如果查詢的整個區間里一個都沒有大于等于查詢值
 返回的即為整個區間的下一位,也就是查詢表示區間[l,r)[l,r)[l,r)的開區間點rrr
 接下來講講為什么要求數組是有序的
 一句話——因為lower_bound,upper_boundlower\_bound,upper\_boundlower_bound,upper_bound的實質是二分
 
如果不能保證數組的單調性
 你的性命就完全由數據決定是春分刀斬還是秋后腰斬
 
偶爾可能會用到的——去重
unique();食用指南:
返回的是也是地址,同樣也需要一樣的頭文件
想要下標的操作同樣是減去數組名
這個去重的前提依然是數組單調有序
unique( a + 1, a + n + 1 ) - a;表示將數組aaa的[1,n+1)[1,n+1)[1,n+1)進行去重操作后得到的下標
 為什么說是下標,因為其返回的其實是區間去重補位后在aaa數組的下標
 
如果數組下標不是從000開始的,那么要減去開始位置
 
 建議自己整些數據手玩,說不定可以發現更多計算機的好玩之處哦!~
 
總結
以上是生活随笔為你收集整理的[C++ STL algorithm] lower_bound、upper_bound、unique的本质的全部內容,希望文章能夠幫你解決所遇到的問題。
 
                            
                        - 上一篇: 交换机安装
- 下一篇: 电脑更新软件后如何返回之前的旧版本
