21xrx.com
2024-12-22 22:28:39 Sunday
登录
文章检索 我的文章 写文章
C++函数对象(Functor)
2023-07-12 14:05:47 深夜i     --     --
C++ 函数对象 Functor 重载运算符 泛型编程

C++函数对象(Functor)是指能够像函数一样被调用的对象,其实现方式是通过重载()运算符。

在C++中,函数对象能够取代函数指针,可以直接传递给STL算法中的参数,使得代码更加简洁和可读。同时,函数对象还可以保存状态,这就使得它在某些情况下比函数指针更加灵活。

举个例子,假如我们要使用STL中的algorithm库进行排序,我们可以这样写:


#include <algorithm>

#include <vector>

#include <iostream>

using namespace std;

int main()

{

  vector<int> v = 3;

  sort(v.begin(), v.end());

  for(auto elem : v) cout << elem << " ";

  cout << endl;

  return 0;

}

但是如果我们想要按照绝对值进行排序,就需要使用函数对象了:


#include <algorithm>

#include <vector>

#include <iostream>

using namespace std;

struct AbsComp

{

  bool operator()(const int& lhs, const int& rhs) const

  {

    return abs(lhs) < abs(rhs);

  }

};

int main()

{

  vector<int> v = 7;

  sort(v.begin(), v.end(), AbsComp());

  for(auto elem : v) cout << elem << " ";

  cout << endl;

  return 0;

}

在上面的代码中,我们定义了一个名为AbsComp的函数对象,并重载了()运算符,然后在sort函数的第三个参数中传入了AbsComp对象。

除了sort函数,STL中还有其他很多算法函数,都可以使用函数对象进行参数传递。如果读者对STL感兴趣,建议多多阅读相关资料。

总之,函数对象是C++中非常强大和灵活的特性,可以用于解决很多实际问题。如果读者还没有熟悉这一特性,建议好好学习一下。

  
  

评论区

{{item['qq_nickname']}}
()
回复
回复