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&)。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM