binary_search(二分查找)
//版本一:调用operator<进行比较 template <class ForwardIterator,class StrictWeaklyCompareable> bool binary_search(ForwardIterator first,ForwardIterator last,const StrictWeaklyCompareable &value); //版本二:调用自己定义的function object template <class ForwardIterator,class T,class StrictWeaklyCompareable> bool binary_search(ForwardIterator first,ForwardIterator last,const T& value,StrictWeaklyCompareable cmp);
若找到值==value的,返回true,否则返回false(if and only if [first,last)中存在一个iterator i,使得*i<value&&vale<*i(cmp(*i,value)和cmp(value,*i))都不成立返回true)
对于RandomAccessIterator和其他的Iterator复杂度不同,advance对于RandomAccessIterator为常量,对于ForwardIterator为线性
lower_bound
//版本一:调用operator<进行比较 template <class ForwardIterator,class StrictWeaklyCompareable> bool lower_bound(ForwardIterator first,ForwardIterator last,const StrictWeaklyCompareable &value); //版本二:调用自己定义的function object template <class ForwardIterator,class T,class StrictWeaklyCompareable> bool lower_bound(ForwardIterator first,ForwardIterator last,const T& value,StrictWeaklyCompareable cmp);
为二分查找的一种
- 若存在,返回的iterator指向第一个值为value的元素
- 若不存在,返回第一个不小于value的元素(也即是不破坏元素顺序下第一个可安插value的位置)
- 若比range中的所有元素都大,则指向end
upper_bound
//版本一:调用operator<进行比较 template <class ForwardIterator,class StrictWeaklyCompareable> bool upper_bound(ForwardIterator first,ForwardIterator last,const StrictWeaklyCompareable &value); //版本二:调用自己定义的function object template <class ForwardIterator,class T,class StrictWeaklyCompareable> bool upper_bound(ForwardIterator first,ForwardIterator last,const T& value,StrictWeaklyCompareable cmp);
为二分查找的一种
- 若存在,返回最后一个元素的下一位置
- 若不再在,返回最后一个可安插value的位置
- 若比range中的所有元素都大,则指向end