📅  最后修改于: 2023-12-03 15:29:54.234000             🧑  作者: Mango
C++中的函子是一种特殊的函数对象,它能够被当做普通函数一样使用。函子是一个类对象,它重载了“()”操作符,使得该对象可以像函数一样被调用。本文将为您介绍函子的概念、构造方法、使用场景以及示例代码。
在C++中,函数也是一种对象。它可以被指针或者引用表示,并且可以被当做参数传递。 函数对象(Functor)是一个类对象,该对象可以像函数一样被调用。函子一般作为一种回调机制被广泛应用,最初由STL标准库中的算法和函数对象组成的。
创建函子(Functor)一般需要定义一个包含“operator()”操作符的类。该操作符定义了对象被调用时,执行的具体操作。
以下是创建函子的示例代码:
class AddFunctor
{
public:
int operator() (int a, int b) const
{
return a + b;
}
};
在上例中,我们定义了一个AddFunctor类,它包含了一个“operator()”操作符。此处,我们定义了一个加法操作,以便对象被调用时执行。在该函子中,我们接收两个整数类型的参数并返回它们的和。
函子的一大优势在于,它能够将函数作为一种数据类型进行传递和使用。函数指针是C++中最经典的函数式编程技术,而函子则可以完成所有函数指针的功能,并拥有更多的优势。因此,函子在很多场景中被广泛应用,比如:
下面是使用函子进行排序的示例代码:
#include <algorithm>
#include <iostream>
#include <vector>
using namespace std;
class SortFunctor
{
public:
bool operator() (int a, int b)
{
return a > b;
}
};
int main()
{
vector<int> v = {5, 3, 1, 4, 2};
SortFunctor functor;
sort(v.begin(), v.end(), functor);
for (auto i : v) {
cout << i << " ";
}
cout << endl;
return 0;
}
在上述代码中,我们定义了一个SortFunctor类,该类包含一个“operator()”操作符。在该操作符中,我们接收两个参数并返回它们的排序结果。接着,我们在main函数中,使用该函子对vector中的元素进行排序,最后输出排序结果。