c++ 仿函数的使用

介绍

看上去像一个函数, 其实是一个类。 在通俗一点就是, 操作符重载函数 operator()()

  • 第一种 重载() operator()
  • lambda 表达式
用途:

在c++ STL算法中 经常会用到。
比如 count_if, find_if

如下代码
#include 
#include
#include
using namespace std;
// 自定义 count_if
template <class Input,class Fun>
int Count_If(Input first, Input last,Fun f)
{
    int number = 0;
    for (; first != last; ++first)
    {
        if (f(*first)) {
            number++;
        }
    }
    return number;
}
// 自定义 count
template <class Input,class T>
int Count(Input first, Input last,T value)
{
    int number = 0;
    for (; first != last; ++first)
    {
        if (value == *first) {
            number++;
        }
    }
    return number;
}
class function
{
public:
    function(int name):name_(name){}
    bool operator()(int age)
    {
        return name_ == age ? true: false;
    }
private:
    int name_;


};
int main()
{
    std::vector<int> vec{1,2,3,4,5,6,7,8,7,8,8,3};
    std::cout<<Count_If(vec.begin(),vec.end(),function(8))<<std::endl;
    std::cout<<Count_If(vec.begin(),vec.end(),[](int value){ return value == 8 ;})<<std::endl;
    std::cout<<Count(vec.begin(),vec.end(),8)<<std::endl;
    return 0;
}

在代码中 已经看到, count 第三个 其实是一个数值, 而在 count_if 中需要的是一个条件函数。 条件是随时可变的。 所以这种 仿函数的形式 在stl 中大量存在。 当然最简单是 使用lambda 也是可以的。

你可能感兴趣的:(STL,c++,仿函数)