在C++中,函數(shù)對(duì)象(也稱為仿函數(shù)或functor)是一個(gè)類或結(jié)構(gòu)體,它重載了operator()
運(yùn)算符,使得類的對(duì)象可以像函數(shù)一樣被調(diào)用。函數(shù)對(duì)象通常用于STL(Standard Template Library)算法中,作為傳遞的可調(diào)用實(shí)體。
以下是使用C++函數(shù)對(duì)象的基本步驟:
operator()
運(yùn)算符。這個(gè)運(yùn)算符接受與函數(shù)相同的參數(shù)列表,并返回一個(gè)值。class MyFunctor {
public:
int operator()(int a, int b) const {
return a * b;
}
};
std::transform
算法來對(duì)一個(gè)數(shù)組進(jìn)行操作。#include <algorithm>
#include <vector>
#include <iostream>
int main() {
std::vector<int> nums = {1, 2, 3, 4, 5};
MyFunctor myFunctor;
// 使用std::transform算法對(duì)nums數(shù)組進(jìn)行操作
std::vector<int> result(nums.size());
std::transform(nums.begin(), nums.end(), result.begin(), myFunctor);
// 輸出結(jié)果
for (int num : result) {
std::cout << num << " ";
}
return 0;
}
在這個(gè)例子中,std::transform
算法將MyFunctor
對(duì)象應(yīng)用于nums
數(shù)組的每個(gè)元素,并將結(jié)果存儲(chǔ)在result
數(shù)組中。由于MyFunctor
重載了operator()
運(yùn)算符,因此它可以像函數(shù)一樣被調(diào)用。
除了std::transform
之外,還有許多其他的STL算法可以使用函數(shù)對(duì)象作為參數(shù),例如std::for_each
、std::find_if
等。函數(shù)對(duì)象提供了一種靈活的方式來傳遞可調(diào)用實(shí)體到STL算法中,而無需編寫額外的函數(shù)或lambda表達(dá)式。