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 << "\n";
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&)。

posted @ 2018-05-24 10:07  Ariel_一只猫的旅行  阅读(1388)  评论(0编辑  收藏  举报