C++进阶:STL算法9--边界

1. 简介

边界函数必须先排序,才能使用

函数 作用 文档
lower_bound(beg,end,val) 在[beg,end)范围内的可以插入val而不破坏容器顺序的第一个位置,返回一个ForwardIterator lower_bound()
lower_bound(beg,end,val,comp) 使用函数comp代替比较操作符执行lower_bound() lower_bound()
upper_bound(beg,end,val) 在[beg,end)范围内插入val而不破坏容器顺序的最后一个位置,该位置标志一个大于val的值,返回一个ForwardIterator upper_bound()
upper_bound(beg,end,val,comp) 使用函数comp代替比较操作符执行upper_bound() upper_bound()
equal_range(beg,end,val) 返回一对iterator,第一个表示lower_bound,第二个表示upper_bound equal_range()
equal_range(beg,end,val,comp) 使用函数comp代替比较操作符执行lower_bound() equal_range()

2. 示例代码

  • lower_bound/upper_bound
// lower_bound/upper_bound example
#include      // std::cout
#include     // std::lower_bound, std::upper_bound, std::sort
#include        // std::vector

int main () {
  int myints[] = {10,20,30,30,20,10,10,20};
  std::vector 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::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;
}
  • equal_range
// equal_range example
#include      // std::cout
#include     // std::equal_range, std::sort
#include        // std::vector

bool mygreater (int i,int j) { return (i>j); }

int main () {
  int myints[] = {10,20,30,30,20,10,10,20};
  std::vector v(myints,myints+8);                         // 10 20 30 30 20 10 10 20
  std::pair::iterator,std::vector::iterator> bounds;

  // using default comparison:
  std::sort (v.begin(), v.end());                              // 10 10 10 20 20 20 30 30
  bounds=std::equal_range (v.begin(), v.end(), 20);            //          ^        ^

  // using "mygreater" as comp:
  std::sort (v.begin(), v.end(), mygreater);                   // 30 30 20 20 20 10 10 10
  bounds=std::equal_range (v.begin(), v.end(), 20, mygreater); //       ^        ^

  std::cout << "bounds at positions " << (bounds.first - v.begin());
  std::cout << " and " << (bounds.second - v.begin()) << '\n';

  return 0;
}

3. 练习

你可能感兴趣的:(C++进阶:STL算法9--边界)