C++<algorithm>能用到的几个内置函数

  1. #include <iostream>  
  2. #include <cstdio>  
  3. #include <algorithm>  
  4. using namespace std;  
  5. void print(int &elem){  //有无&均可   
  6.     cout << elem << " ";  
  7. }  
  8. //qsprt必须用这种格式定义比较函数,像bj定义qsort传入参数会出错  
  9. // *和(int *)是同一优先级运算符,但结合方向是从右向左  
  10. int cmp(const void *a, const void *b){   
  11.     return *(int *)a - *(int *)b;  
  12. }  
  13. int bj(int a, int b){   
  14.     return a > b;  
  15. }  
  16. int main(){  
  17.     int a[] = {0, 3, 9, 1, 4, 8, 5, 2, 6, 7};  
  18.       
  19.     //algorithm头文件for_each( , , )函数用法  
  20.     for_each(a, a+10, print);  
  21.     cout << endl;  
  22.       
  23.     //快排模板函数,数组下标从0开始,即排序下标为0-9的元素  
  24.     qsort(a, 10, sizeof(a[0]), cmp);  
  25.     for_each(a, a+10, print);  
  26.     cout << endl;  
  27.       
  28.     //algorithm中的swap函数  
  29.     char x = 'X', y = 'Y';  
  30.     swap(x, y);  
  31.     printf("x = %c, y = %c\n", x, y);  
  32.       
  33.     char str[] = "abcdefgh";  
  34.     //algorithm中的反转函数  
  35.     reverse(str+2,str+7);   //前闭后开   
  36.     cout << str << endl;  
  37.   
  38.   
  39.     int aa[] = {0, 3, 9, 1, 4, 8, 5, 2, 6, 7};  
  40.     for_each(aa, aa+10, print);  
  41.     cout << endl;  
  42.     //qsort,sort时间复杂度都是O(n*log(n)),但实际中sort速度一般比qsort快!!  
  43.     // sort(aa, aa+10);  
  44.     //不传入第三个参数默认sort为升序排序  
  45.     sort(aa, aa+10, bj);  
  46.     //传入参数从大到小排序,且sort第三个参数不能用cmp函数  
  47.     for_each(aa, aa+10, print);  
  48.       
  49.       
  50.     cout << endl << max(66,88) << endl << min(66,88) << endl;  
  51.     //max和min函数  
  52.       
  53.       
  54.     //二路归并,头文件algorithm  
  55.     int ak[] = {1, 9, 5, 4, 7};  
  56.     int ka[] = {3, 6, 2, 8, 0};  
  57.     int kk[15];  
  58.     sort(ak, ak+5);  
  59.     sort(ka, ka+5);  
  60.     merge(ak, ak+5, ka, ka+5, &kk[1]);  
  61.       
  62.     for_each(ak, ak+5, print);  
  63.     cout << endl;  
  64.     for_each(ka, ka+5, print);  
  65.     cout << endl;  
  66.     for_each(kk+1, kk+11, print);  
  67.     cout << endl;  
  68.     return 0;  
  69. }  

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章