C++ 仿函数使用讲解
仿函数(Functor)是C++中的一种特殊类型的对象,它可以像函数一样被调用。仿函数可以作为参数传递给算法函数,也可以在容器中存储。在C++中,仿函数通常是通过重载函数调用运算符(operator())来实现的。
1. 仿函数的定义和使用
要定义一个仿函数,需要创建一个类,并在该类中重载函数调用运算符(operator())。下面是一个简单的示例:
class AddFunctor {
public:
int operator()(int a, int b) {
return a + b;
}
};
在上面的示例中,我们定义了一个名为AddFunctor
的仿函数类,它重载了函数调用运算符。该仿函数接受两个整数作为参数,并返回它们的和。
要使用这个仿函数,可以像调用普通函数一样调用它:
AddFunctor add;
int result = add(3, 4); // 调用仿函数,返回结果7
2. 仿函数作为算法函数的参数
仿函数可以作为算法函数的参数,用于指定算法的行为。下面是一个示例,演示了如何使用仿函数作为std::sort
算法的比较函数:
#include <iostream>
#include <vector>
#include <algorithm>
class GreaterThanFunctor {
public:
bool operator()(int a, int b) {
return a > b;
}
};
int main() {
std::vector<int> numbers = {5, 2, 8, 1, 9};
std::sort(numbers.begin(), numbers.end(), GreaterThanFunctor());
for (int num : numbers) {
std::cout << num << \" \";
}
std::cout << std::endl;
return 0;
}
在上面的示例中,我们定义了一个名为GreaterThanFunctor
的仿函数类,它重载了函数调用运算符。该仿函数用于比较两个整数的大小,返回true
表示第一个参数大于第二个参数。
在main
函数中,我们创建了一个整数向量numbers
,并使用std::sort
算法对其进行排序。我们将GreaterThanFunctor
的一个实例作为第三个参数传递给std::sort
,以指定排序的顺序。
输出结果为:9 8 5 2 1,表示按照从大到小的顺序对向量进行了排序。
3. 仿函数在容器中的使用
仿函数可以存储在容器中,以便稍后使用。下面是一个示例,演示了如何将多个仿函数存储在std::vector
容器中,并依次调用它们:
#include <iostream>
#include <vector>
class Functor {
public:
void operator()() {
std::cout << \"Hello from Functor!\" << std::endl;
}
};
int main() {
std::vector<Functor> functors;
functors.push_back(Functor());
functors.push_back(Functor());
for (const auto& functor : functors) {
functor();
}
return 0;
}
在上面的示例中,我们定义了一个名为Functor
的仿函数类,它重载了函数调用运算符。该仿函数不接受任何参数,只输出一条简单的消息。
在main
函数中,我们创建了一个std::vector
容器functors
,并将两个Functor
的实例添加到容器中。然后,我们使用for
循环依次调用容器中的每个仿函数。
输出结果为:
Hello from Functor!
Hello from Functor!
表示两个仿函数被依次调用。
以上是关于C++仿函数的详细讲解,希望对你有帮助!
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C++ 仿函数使用讲解 - Python技术站