std::upper_bound

来源:互联网 发布:蒙古族 知乎 编辑:程序博客网 时间:2024/06/09 17:10

Returns an iterator pointing to the first element in the range [first,last) which compares greater than val.
定义如下:

template <class ForwardIterator, class T>  ForwardIterator upper_bound (ForwardIterator first, ForwardIterator last, const T& val){  ForwardIterator it;  iterator_traits<ForwardIterator>::difference_type count, step;  count = std::distance(first,last);  while (count>0)  {    it = first; step=count/2; std::advance (it,step);    if (!(val<*it))                 // or: if (!comp(val,*it)), for version (2)      { first=++it; count-=step+1;  }    else count=step;  }  return first;}

示例:

#include <iostream>     // std::cout#include <algorithm>    // std::lower_bound, std::upper_bound, std::sort#include <vector>       // std::vectorint main () {  int myints[] = {10,20,30,30,20,10,10,20};  std::vector<int> v(myints,myints+8);           // 10 20 30 30 20 10 10 20  std::sort (v.begin(), v.end());                // 10 10 10 20 20 20 30 30  std::vector<int>::iterator low,up;  low=std::lower_bound (v.begin(), v.end(), 20); //          ^  up= std::upper_bound (v.begin(), v.end(), 20); //                   ^  std::cout << "lower_bound at position " << (low- v.begin()) << '\n';  std::cout << "upper_bound at position " << (up - v.begin()) << '\n';  return 0;}

output:
lower_bound at position 3
upper_bound at position 6

0 0
原创粉丝点击