一、sort函数

在sort函数中使用 greater<>() 和 less<int>()
int A[]={1,4,3,7,10};
const int N=sizeof(A)/sizeof(int);
vector<int>vec(A, A+N);

sort(vec.begin(),vec.end(),greater<int>()); //内置类型从大到小 降序
sort(vec.begin(),vec.end(),less<int>());      //内置类型从小到大 升序

二、transform

函数的作用是:将某操作应用于指定范围的每个元素。

transform(first,last,result,op);//first是容器的首迭代器,last为容器的末迭代器,result为存放结果的容器,op为要进行操作的一元函数对象或sturct、class。
transform(first1,last1,first2,result,binary_op);//first1是第一个容器的首迭代 器,last1为第一个容器的末迭代器,first2为第二个容器的首迭代器,result为存放结果的容器,binary_op为要进行操作的二元函数 对象或sturct、class。

注意:第二个重载版本必须要保证两个容器的元素个数相等才行,否则会抛出异常。
看一个例子:利用transform函数将一个给定的字符串中的小写字母改写成大写字母,并将结果保存在一个叫second的数组里,原字符串内容不变。

string  paragraph = "Bob hit a ball, the hit BALL flew far after it was hit.";

transform(paragraph.begin(),paragraph.end(),paragraph.begin(),::tolower);  //将paragraph中字符转换成小写

 

三、二分查找  lower_bound 与 upper_bound 函数

头文件: #include  <algorithm>

二分查找的函数有 3 个: 

lower_bound(起始地址,结束地址,要查找的数值) 返回的是数值 第一个 出现的位置。

upper_bound(起始地址,结束地址,要查找的数值) 返回的是 第一个大于待查找数值 出现的位置。

binary_search(起始地址,结束地址,要查找的数值)  返回的是是否存在这么一个数,是一个bool值

注意:使用二分查找的前提是数组有序。

 

1  函数lower_bound()  参考:有关lower_bound()函数的使用

功能:函数lower_bound()在first和last中的前闭后开区间进行二分查找,返回大于或等于val的第一个元素位置。如果所有元素都小于val,则返回last的位置.

注意:如果所有元素都小于val,则返回last的位置,且last的位置是越界的!!

2 函数upper_bound()

功能:函数upper_bound()返回的在前闭后开区间查找的关键字的上界,返回大于val的第一个元素位置

注意:返回查找元素的最后一个可安插位置,也就是“元素值>查找值”的第一个元素的位置。同样,如果val大于数组中全部元素,返回的是last。(注意:数组下标越界)

PS

        lower_bound(val):返回容器中第一个值【大于或等于】val的元素的iterator位置。

        upper_bound(val): 返回容器中第一个值【大于】val的元素的iterator位置。

 

    vector<int> t;
    t.push_back(1);
    t.push_back(2);
    t.push_back(3);
    t.push_back(4);
    t.push_back(6);
    t.push_back(7);
    t.push_back(8);

    
    int low=lower_bound(t.begin(),t.end(),5)-t.begin();
    int upp=upper_bound(t.begin(),t.end(),5)-t.begin();
    cout<<low<<endl;
    cout<<upp<<endl;

 

STL的map、multimap、set、multiset都有三个比较特殊的函数,lower_bound、upper_bound、equal_range。

原型如下:  

  1. iterator lower_bound (const value_type& val) const;
  2.  
  3. iterator upper_bound (const value_type& val) const;
  4.   
  5. pair<iterator,iterator> equal_range (const value_type& val) const;

 上面三个函数是相关联的,equal_range返回两个迭代器,第一个迭代器是lower_bound的返回值,第二个迭代器是upper_bound的返回值。(注意是使用相同val值调用的情况下。)