21xrx.com
2024-12-22 21:47:36 Sunday
登录
文章检索 我的文章 写文章
C++仿函数的应用
2023-07-10 13:52:43 深夜i     --     --
C++ 仿函数 应用

C++中的仿函数是一种特殊的函数对象,可以像普通函数一样被调用。它们可以作为参数传递给其他函数,通常用于STL算法中。

在STL算法中,有许多函数需要一个函数对象来指定某种操作,例如sort、count_if、accumulate等。这时,我们可以使用仿函数来实现。

使用仿函数有两种方式:一种是通过定义一个类来实现仿函数,另一种是使用Lambda表达式。

首先,我们来看定义类实现仿函数的方式:


class Add {

public:

  int operator()(int x, int y) const {

    return x + y;

  }

};

上面的代码定义了一个Add类,它实现了一个函数调用运算符operator(),用于将两个整数相加。我们可以像调用普通函数一样使用Add类:


Add add;

int result = add(1, 2);   // 结果为3

除了定义类以外,我们还可以使用Lambda表达式来实现仿函数。Lambda表达式可以视为匿名函数,它可以被作为参数传递给其他函数。下面的代码展示了如何使用Lambda表达式实现一个相加函数:


auto add = [](int x, int y) -> int {

  return x + y;

};

int result = add(1, 2);   // 结果为3

其中,[]表示Lambda表达式的起始符号,(int x, int y)表示Lambda表达式的参数列表,-> int表示返回值类型,以及函数体return x + y。

在应用仿函数时,我们会经常使用标准库提供的函数对象,例如STL中的plus、multiplies等。这些函数对象已经实现了操作符或函数调用运算符,可以直接使用。例如:


#include <algorithm>

#include <iostream>

#include <vector>

#include <functional>

int main() {

  std::vector<int> v = 2;

  int sum = std::accumulate(v.begin(), v.end(), 0, std::plus<int>());

  std::cout << "sum = " << sum << std::endl;

  return 0;

}

上面的代码使用了STL中的accumulate函数来计算一个整数数组的和,其中第四个参数是一个函数对象,这里使用了std::plus (),表示将两个整数相加。

  
  

评论区

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