首页 > 编程语言 >c++ function使用

c++ function使用

时间:2023-11-11 21:13:34浏览次数:23  
标签:function std 函数 int c++ 使用 include display

一、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等

 

 

 

 

 

标签:function,std,函数,int,c++,使用,include,display
From: https://www.cnblogs.com/linx000/p/17826352.html

相关文章

  • 使用反编译软件jd-gui.exe,打开提示:The application requires a Java Runtime Enviro
      jd-gui.exe,打开提示:TheapplicationrequiresaJavaRuntimeEnvironment1.8.0 但是已经是java1.8版本了 这时候修改注册表win+R输入regedit打开注册表找到HKEY_LOCAL_MACHINE\SOFTWARE\JavaSoft\JavaRuntimeEnvironment\1.8如果 JavaRuntimeEnvironment......
  • 【5.0】Go语言基础之包的使用
    【一】包的作用为了便于组织代码,同一种类型的代码,写在同一个包下,便于管理【二】定义包的步骤【1】新建一个文件夹【2】内部有很多go文件【3】go文件的第一行声明包名在每个go文件的第一行,都要声明包名,并且包名必须一致packageuser【4】在一个文件夹下只能有一个包(......
  • MySQL 数据库查询与数据操作:使用 ORDER BY 排序和 DELETE 删除记录
    使用ORDERBY进行排序使用ORDERBY语句按升序或降序对结果进行排序。ORDERBY关键字默认按升序排序。要按降序排序结果,使用DESC关键字。示例按名称按字母顺序排序结果:importmysql.connectormydb=mysql.connector.connect(host="localhost",user="youruserna......
  • 【8.0】Go语言基础之可变函数参数、map的使用
    【一】可变长参数【1】任意长度的指定类型的参数packagemainimport"fmt"funcmain(){ //可变长参数 //调用函数 foo(1,2,3,4,5,6) //这是接收到的参数a:>>>>[123456] //这是接收到的参数a的类型:>>>>[]int}//可以接收任意长度的int类......
  • 【爱芯派 Pro 开发板试用体验】+基本使用环境配置
    【爱芯派Pro开发板试用体验】+基本使用环境配置登录系统系统默认为debian系统,插入网线,插入显示器,鼠标、键盘,介绍基础系统使用操作。将M4N-Dock连接上显示器后,可以看到图形化交互界面了。在登录界面,输入用户名root,密码root就可以登录进系统了。进入系统后的界面如下:......
  • python中包管理工具pip以及虚拟环境venv的使用
    1.pip命令查看已安装的包piplist安装包pipinstallpackage_name卸载包#卸载指定包pipuninstallpackage_name#卸载已安装的所有第三方Python库pipfreeze>list.txtpipuninstall-rlist.txt-y导出已安装的包pipfreeze>requirements.txt配置全局默......
  • C++ 采用get()和put()读写文件
    在某些特殊的场景中,我们可能需要逐个读取文件中存储的字符,或者逐个将字符存储到文件中。这种情况下,就可以调用get()和put()成员方法实现。C++ostream::put()成员方法通过《C++cout.put()》一节的学习,读者掌握了如何通过执行cout.put()方法向屏幕输出单个字符。我们知道,fstr......
  • C++ 使用getline():从文件中读取一行字符串
    getline()方法从cin输入流缓冲区中读取一行字符串。在此基础上,getline()方法还适用于读取指定文件中的一行数据,本节就给大家做详细的讲解。我们知道,getline()方法定义在istream类中,而fstream和ifstream类继承自istream类,因此fstream和ifstream的类对象可以调用ge......
  • C++ 采用read()和write()读写二进制文件
    以文本形式读写文件和以二进制形式读写文件的区别,并掌握了用重载的>>和<<运算符实现以文本形式读写文件。在此基础上,本节继续讲解如何以二进制形式读写文件。举个例子,现在要做一个学籍管理程序,其中一个重要的工作就是记录学生的学号、姓名、年龄等信息。这意味着,我们需要用一个......
  • C++ 的cout格式化输出
    在某些实际场景中,我们经常需要按照一定的格式输出数据,比如输出浮点数时保留2位小数,再比如以十六进制的形式输出整数,等等。对于学过C语言的读者应该知道,当使用printf()函数输出数据时,可以通过设定一些合理的格式控制符,来达到以指定格式输出数据的目的。例如%.2f表示输出浮点......