c++ function使用

一、function介绍

funciotn是从c++11开始支持的特性,使用它需要包含<functional>头文件

在cppreference中解释为:类模板std::function是一个通用的多态函数包装器。std::function的实例可以对任何可以调用的目标实体进行存储、复制、和调用操作,这些目标实体包括普通函数、Lambda表达式、函数指针、以及其它函数对象等。

通俗的来说可以把它当做一个函数指针来使用

二、function使用

function的模板是 std::function<返回值类型(传入参数类型)> 方法名

这里传入参数类型可以是自己定义的

举几个简单的例子:

std::function<int(int)> display;
这表示我定义了一个名为display的函数指针,它传入的参数类型是int,返回值类型也是int
struct student
{
    int age;
    int name;
};
int main(){
    std::function<int(student a)> student1;    
    return 0;
}

 这里我自己定义了一个student类型,然后将student1的传入参数设置为student类型

如下是一个基本的用法
#include<iostream>
#include<functional>
#include<algorithm>

int show(int a)
{
    std::cout << a << std::endl;
    return 0;
}

int main(){

    std::function<int(int)> display = show;
    display(-5);

    return 0;
}

我们让这个display = show(这里要注意传入参数和返回值类型的匹配)代表着我们可以通过display来调用show,从而来输出我们想要输出的数字

然后我们来展示一下函数指针的用法

#include<iostream>
#include<functional>
#include<algorithm>

int add(int a)
{
    std::cout << ++a << “ ”;
    return a;
}
int decrease(int a)
{
    std::cout << --a << std::endl;
    return a;
}

int main(){
    std::function<int(int a)> a(&add);
    a(5);
    a = &decrease;
    a(5);

    return 0;
}

这里我们先让a执行add函数,然后让a = &decrease再执行decrease函数,执行出的结果为6 4

个人认为function最常用的是与lambda相结合,可以提高函数的灵活性

例如:

#include<iostream>
#include<functional>
#include<algorithm>

int main(){
    int arr[5] = {1, 5, 4, 8, 6};
    std::function<int(int a, int b)> cmp = [&](int a, int b)
    {
        return a > b;
    };

    sort(arr, arr + 5, cmp);
    for (int i = 0; i < 5; i++)
        std::cout << arr[i] << " ";
    return 0;
}
输出的结果为8 6 5 4 1

通过function构造的一个cmp函数,结合lambda语法实现降序排列,这只是一个简单的用法,你可以构造其他的函数比如dfs等

 

 

 

 

 
posted @ 2023-11-11 20:56  clinx000  阅读(250)  评论(0编辑  收藏  举报