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. }  

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