在C++中,函数对象(也称为仿函数或functor)是一个类或结构体,它重载了operator()
运算符,使得类的对象可以像函数一样被调用。函数对象通常用于STL(Standard Template Library)算法中,作为传递的可调用实体。
以下是使用C++函数对象的基本步骤:
operator()
运算符。这个运算符接受与函数相同的参数列表,并返回一个值。class MyFunctor {
public:
int operator()(int a, int b) const {
return a * b;
}
};
std::transform
算法来对一个数组进行操作。#include <algorithm>
#include <vector>
#include <iostream>
int main() {
std::vector<int> nums = {1, 2, 3, 4, 5};
MyFunctor myFunctor;
// 使用std::transform算法对nums数组进行操作
std::vector<int> 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表达式。