zoukankan      html  css  js  c++  java
  • C++ code:函数指针参数

    函数指针除了进行参数传递外,还承接申请的存储空间、释放空间等。而函数指针则主要是用来进行参数传递的,就像引用一样。

    例如,我们来看一下函数指针的传递工作。在标准排序算法sort中,对于所提的整数容器vector,无须提供其他操作就可以顺利完成排序任务。代码如下:

    1 int a[] = {33,61,12,19,14,71,78,59};
    2 vector<int> aa(a,a+8);
    3 sort(aa.begin(),aa.end());

    但若整数的大小是以各位数字之和的大小来确定的,则就不能直接使用sort标准函数来排序。需要先定义一个比较函数,然后再对sort传递比较函数指针,以让sort知道大小关系不是默认的整数值比较,而是根据比较函数来判定。可用函数指针调取比较函数,来进行排序工作。代码如下:

     1 #include<iostream>
     2 #include<algorithm>
     3 #include<vector>
     4 using namespace std;
     5 
     6 int bitSum(int a);
     7 bool lessThanBitSum(int a, int b){ return bitSum(a) < bitSum(b); };
     8 
     9 int main()
    10 {
    11     int a[] = { 33, 61, 12, 19, 14, 71, 78, 59 };
    12     vector<int> aa(a, a + 8);
    13     sort(aa.begin(), aa.end(),lessThanBitSum);
    14     for (int i = 0; i < aa.size(); ++i)
    15         cout << aa[i] << " ";
    16     cout << "
    ";
    17 }
    18 int bitSum(int a)
    19 {
    20     int sum = 0;
    21     for (int x = a; x; x /= 10) sum += x % 10;
    22     return sum;
    23 }

    第13行的sort调用,其第三个实参为比较函数名lessThanBitSum,函数名即为函数指针,正像数组名即为指针一样。sort的形参为一个相对应的函数指针,正像数组传递中,形参为对应的指针那样。

    标准排序算法的使用,依赖于容器中元素类型的小于“<”操作,如果排序的容器中是整数元素,那么,小于“<”的比较判断函数可以省略。因为整数的大小比较操作在C++中本来就具备。否则,sort函数的调用还必须提供第三个参数——指针函数。其参数类型为某个元素类型T的bool(const T&,const T&)。

  • 相关阅读:
    Educational Codeforces Round 20 D. Magazine Ad
    Educational Codeforces Round 20 C. Maximal GCD
    紫书第三章训练2 暴力集
    Educational Codeforces Round 20 B. Distances to Zero
    Educational Codeforces Round 20 A. Maximal Binary Matrix
    紫书第三章训练1 D
    紫书第一章训练1 D -Message Decoding
    HAZU校赛 Problem K: Deadline
    Mutual Training for Wannafly Union #8 D
    紫书第三章训练1 E
  • 原文地址:https://www.cnblogs.com/ariel-dreamland/p/9081338.html
Copyright © 2011-2022 走看看