如何把函式當成乙個引數傳遞(C )

2021-09-26 10:36:05 字數 2029 閱讀 7677

以最簡單的氣泡排序為例,講述如何把函式當成乙個引數傳遞

方法一:傳遞函式指標

#include

#include

using namespace std;

void

bubblesort

(int

* beg,

int* end,

bool

(*cmp)

(int x,

int y))}

if(flag)

return;}

}bool compare_function

(int x,

int y)

intmain()

;bubblesort

(begin

(arr)

,end

(arr)

, compare_function)

;for

(int

* ptr =

begin

(arr)

; ptr !=

end(arr)

; ptr++

) cout <<

*ptr <<

" ";

system

("pause");

return0;

}

方法二:傳遞函式物件

函式物件指乙個將()運算子過載為成員函式的類的例項化物件。函式物件是乙個物件,但是使用的形式看起來像函式呼叫,實際上也執行了函式呼叫,因而得名。由於不知道函式物件的具體型別(只知道過載了()運算子),故用泛型template來表示函式物件的資料型別。

#include

#include

using namespace std;

template

void

bubblesort

(int

* beg,

int* end, t cmp)}if

(flag)

return;}

}class compare_function};

intmain()

;bubblesort

(begin

(arr)

,end

(arr)

,compare_function()

);for(

int* ptr =

begin

(arr)

; ptr !=

end(arr)

; ptr++

) cout <<

*ptr <<

" ";

system

("pause");

return0;

}

方法三:傳遞lambda表示式

lambda表示式是c++11新支援的一種特性,可以將labmbda表示式看成為一種特殊的函式物件(可以作為引數傳遞)。

#include

#include

using namespace std;

template

void

bubblesort

(int

* beg,

int* end, t cmp)}if

(flag)

return;}

}int

main()

;bubblesort

(begin

(arr)

,end

(arr),[

](int x,

int y));

for(

int* ptr =

begin

(arr)

; ptr !=

end(arr)

; ptr++

) cout <<

*ptr <<

" ";

system

("pause");

return0;

}

VB 如何把乙個listbox作為引數傳遞

方法一 listbox2.items.clear for i 0 to listbox1.items.count 1 listbox2.items.add listbox1.items i next 這樣就將listbox1的列表項移動到另乙個listbox2中了 這是利用for迴圈 提取第乙個列表...

如何把方法 函式 當引數傳遞

方法的引數一般是變數,但在某些情況下需要這個引數是另乙個方法,這時就可以參考下面這段 了。這個例子也很好的說明了委託在實際工作中的應用,片段 於 c 高階程式設計第6版 隨書的示例 示例 1using system 23 namespace wrox.procsharp.delegates411 1...

js 把函式作為引數傳遞給另乙個方法

正常傳方法不帶引數的不做討論了,看一下方法帶引數的 例如 function function test1 func function test3 data 上述 執行後會直接彈出 22 因為test3 22 傳過去就直接執行了,而不是作為引數傳過去。解決方法兩種 1 使用匿名函式 function ...