STL中使用二分查找的来进行搜索的函数有以下3个:
- upper_bound
- lower_bound
- binary_search
[STL]upper_bound
默认形式:
template<class ForwardIterator, class T>
ForwardIterator upper_bound(ForwardIterator first, ForwardIterator last, const T& val);
客制化形式:
template<class ForwardIterator, class T, class Compare>
ForwardIterator upper_bound(ForwardIterator first, ForwardIterator last, const T& val, Compare comp);
功能:在一个已排序的序列中[first, last),返回第一个大于val的元素所在的地址。如果未找到结果,则返回last,该函数使用二分查找实现;
实现:
template<class ForwardIterator, class T>
ForwardIterator upper_bound(ForwardIterator first, ForwardIterator last, const T& val)
{
ForwardIterator it;
iterator_traits<ForwardIterator>::differnce_type count, step;
count = std::distance(first, last);
while(count > 0)
{
it = first; step = (count >> 1); std::advance(it, step);
if(!(val < *it))
{
first = ++