在C++中,函数对象(也称为仿函数或functor)是一个类或结构体,它重载了operator()
运算符,使得类的对象可以像函数一样被调用。函数对象通常用于STL(Standard Template Library)算法中,作为传递的可调用实体。
以下是使用C++函数对象的基本步骤:
- 定义函数对象类:
首先,你需要定义一个类,并重载
operator()
运算符。这个运算符接受与函数相同的参数列表,并返回一个值。
class MyFunctor {
public:
int operator()(int a, int b) const {
return a * b;
}
};
- 使用函数对象:
一旦你定义了函数对象类,你就可以在STL算法中使用它。例如,你可以使用
std::transform
算法来对一个数组进行操作。
#include#include #include int main() { std::vector nums = {1, 2, 3, 4, 5}; MyFunctor myFunctor; // 使用std::transform算法对nums数组进行操作 std::vector result(nums.size()); std::transform(nums.begin(), nums.end(), result.begin(), myFunctor); // 输出结果 for (int num : result) { std::cout << num << " "; } return 0; }
在这个例子中,std::transform
算法将MyFunctor
对象应用于nums
数组的每个元素,并将结果存储在result
数组中。由于MyFunctor
重载了operator()
运算符,因此它可以像函数一样被调用。
除了std::transform
之外,还有许多其他的STL算法可以使用函数对象作为参数,例如std::for_each
、std::find_if
等。函数对象提供了一种灵活的方式来传递可调用实体到STL算法中,而无需编写额外的函数或lambda表达式。