以最簡單的氣泡排序為例,講述如何把函式當成乙個引數傳遞
方法一:傳遞函式指標
#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 ...