c++のlower_boundとupper_bound

6007 ワード

lower_boundはval以上の最初の値を見つけ、end uppder_を返さないboundはvalより大きい最初の値を見つけて、endの前提を返します:配列は秩序があります
使用法
template<class ForwardIterator, class Type>
   ForwardIterator lower_bound(
      ForwardIterator _First, 
      ForwardIterator _Last,
      const Type& _Val
   );
template<class ForwardIterator, class Type, class BinaryPredicate>
   ForwardIterator lower_bound(
      ForwardIterator _First, 
      ForwardIterator _Last,
      const Type& _Val,
      BinaryPredicate _Comp
   );


リファレンスコード
int lower_bound(vector<int> v,int begin,int end,int target){
	while(begin < end){
		int mid = begin + (end - begin) / 2;
		if(v[mid] < target){
			begin = mid + 1;
		}
		else{
			end = mid;
		}
	}
	return begin;
}

int upper_bound(vector<int> v,int begin,int end,int target){
	while(begin < end){
		int mid = begin + (end - begin) / 2;
		if(v[mid] <= target){
			begin = mid + 1;
		}
		else{
			end = mid;
		}
	}
	return begin;
}