STL5:仿函数

本文介绍了C++中的仿函数,一种模仿函数行为的类。通过重载operator(),仿函数可以实现类似函数的功能,用于代码复用。文章详细讲解了在C语言中如何使用函数指针和回调函数,而在C++中则有函数指针、函数模板、仿函数及仿函数模板四种方式。特别地,文章深入探讨了STL中的算术类、关系运算类和逻辑运算类仿函数,给出了多个使用实例,包括使用Boost lambda表达式和C++11的lambda表达式进行操作的例子。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、概念

模仿函数的类,使用方式如同函数。本质是类中重载括弧运算符operator()。

2、场景

不同函数复用相同处理代码。

3、使用

3.1 C语言的处理方式

使用函数指针和回调函数来实现代码复用。例如qsort()

#include <stdio.h>
#include <stdlib.h>

int arr_sort(const void *a,const void *b){
   
    return *(int *)a-*(int *)b;
}

int main(){
   
    int arr[5]={
   4,1,2,5,6};
    qsort(arr,5,sizeof(arr[0]),arr_sort);
    int i;
    for(i=0;i<5;i++){
   
        printf("%d\n",arr[i]);
    }
    return 0;
}

3.2 C++语言的处理方式

(1)函数指针方式

#include<iostream>
#include<algorithm>

using namespace std;

inline bool Sort(int a,int b){
   
    return a > b;
}
inline void Display(int a){
   
    cout << a << endl;
}

int main(){
   
    int arr[]={
   4,1,2,5,6};
    sort(arr,arr+5,Sort);
    for_each(arr,arr+5,Display);
    return 0;
}

(2)函数模板方式

#include<iostream>
#include<algorithm>
using namespace std;

template<class T>
inline bool Sort(T const& a,const &b){
   
    return a<b;
}

template<class T>
inline void 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值