[C++] C++函数的进化: 函数->函数指针->函数模板->仿函数(函数对象)->Lambda表达式

文章目录

  • 前言
  • C++函数进化路线
  • 代码示例

前言

【C++函数的进化 函数→函数指针→函数模板→仿函数|函数对象→lambda表达式】
观后笔记。

C++函数进化路线

函数->函数指针->函数模板->仿函数(函数对象)->Lambda表达式

代码示例

#include <iostream>
using namespace std;int iData[10] = { 1, 5, 32, 9, 4, 67, 90, 15 ,7, 0 };
//目标找出以上数组中大于50的数,或小于30的数。//普通函数
void PrintLargerData(int* data, int size)
{cout << "大于50的数:";for (int i = 0; i < size; i++){if (data[i] > 50)cout << data[i] << " ";}cout << endl;
}
//函数指针
void PrintTargetData(int* data, int size, bool(*f)(int,int))
{cout << "大于50的数:";for (int i = 0; i < size; i++){if (f(data[i],50))cout << data[i] << " ";}cout << endl;
}bool IsBigger(int i, int j)
{return i>j?true:false;
}
//函数模板
template<typename T, typename Q>
void PrintTargetDataT(T* data, T size, Q(*f)(T, T))
{cout << "大于50的数:";for (T i = 0; i < size; i++){if (f(data[i], 50))cout << data[i] << " ";}cout << endl;
}
//仿函数
class Func
{
public:bool operator()(int i, int j){return i > j ? true : false;}
}func;//仿函数不可以传递给函数指针,因为类型不匹配,所以要重新创建函数模板
template<typename T, typename Q>
void PrintTargetDataTT(T* data, T size, Q q)
{cout << "大于50的数:";for (T i = 0; i < size; i++){if (q(data[i], 50))cout << data[i] << " ";}cout << endl;
}
int main()
{cout << "普通函数" << endl;PrintLargerData(iData,sizeof(iData)/sizeof(int));cout << "函数指针" << endl;PrintTargetData(iData, sizeof(iData) / sizeof(int), IsBigger); //这样主要函数入口不变,每次传入不同的判断条件即可。cout << "函数模板" << endl;PrintTargetDataT<int, bool>(iData, sizeof(iData) / sizeof(int), IsBigger);//升级为函数模板以后,不再局限于单一的数据类型了。cout << "仿函数" << endl;PrintTargetDataTT<int, Func>(iData, sizeof(iData) / sizeof(int), func);cout << "Lambda表达式" << endl;PrintTargetDataT<int, bool>(iData, sizeof(iData) / sizeof(int), [](int a, int b)->bool { return a > b ? true : false; });//Lambda本身可以看作一个函数指针,所以可以直接传入。
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/729859.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

容器:Docker部署

docker 是容器&#xff0c;可以将项目的环境&#xff08;比如 java、nginx&#xff09;和项目的代码一起打包成镜像&#xff0c;所有同学都能下载镜像&#xff0c;更容易分发和移植。 再启动项目时&#xff0c;不需要敲一大堆命令&#xff0c;而是直接下载镜像、启动镜像就可以…

【Eclipse插件开发】5JFace UI框架-中

【Eclipse插件开发】5JFace UI框架-下 文章目录 【Eclipse插件开发】5JFace UI框架-下三、用户接口资源3.1 Image descriptors and the registryImage descriptor图像注册表3.2 使用图像的插件模式在plugin.xml中指明图像显式的创建图像注册标签提供插件中的图像类3.3 资源管理…

echarts x轴名称过长tip显示全称

xAxis的axisLabel的内容如下&#xff1a; axisLabel: { rotate: -45, color: document.body.className.indexOf(custom-f4c46d) > -1 ? #fff : #343434, // 显示省略号操作&#xff08;第一步&#xff09; formatter: function (value) { var val if (value.length >…

NTP协议介绍

知识改变命运&#xff0c;技术就是要分享&#xff0c;有问题随时联系&#xff0c;免费答疑&#xff0c;欢迎联系&#xff01; 网络时间协议NTP&#xff08;Network Time Protocol&#xff09;是TCP/IP协议族里面的一个应用层协议&#xff0c;用来使客户端和服务器之间进行时…

C while 循环

只要给定的条件为真&#xff0c;C 语言中的 while 循环语句会重复执行一个目标语句。 语法 C 语言中 while 循环的语法&#xff1a; while(condition) {statement(s); }在这里&#xff0c;statement(s) 可以是一个单独的语句&#xff0c;也可以是几个语句组成的代码块。 co…

IOS开发0基础入门UIkit-1cocoapod安装、更新和使用 , 安装中出现的错误及解决方案 M1或者M2安装cocoapods

cocoapod是ios开发时常用的包管理工具 1.M1或者是M2系统安装cocoapods先操作一下两个设置 1、打开访达->应用->实用工具->终端->右键点击终端->显示简介->勾选使用 Rosetta 打开&#xff0c;关闭终端&#xff0c;重新打开。 2、打开访达->应用->Xcod…

docker搭建 Watchtower

Watchtower 是一个非常实用的工具&#xff0c;它自动监视你的 Docker 容器并在发现基础镜像被更新时自动重启容器&#xff0c;使用最新的镜像。这对于确保你的应用程序始终运行最新版本的镜像是非常有帮助的&#xff0c;尤其是在安全更新的情况下。 如何使用 Docker 搭建 Watc…

ApiPost设置预执行脚本获取token,并设置给请求头

ApiPost设置预执行脚本获取token&#xff0c;并设置给请求头 预执行脚本 这个地方获取字段为 {"msg": "操作成功","code": 200,"token": "eyJhbGciOixMiJ9.123-NQQPPKGr4Yxa1_H_JIrUXJQ" }修改head 里面参数

OpenAI劲敌吹新风! Claude 3正式发布,Claude3使用指南

Claude 3是什么&#xff1f; 是Anthropic 实验室近期推出的 Claude 3 大规模语言模型&#xff08;Large Language Model&#xff0c;LLM&#xff09;系列&#xff0c;代表了人工智能技术的一个显著飞跃。 该系列包括三个不同定位的子模型&#xff1a;Claude 3 Haiku、Claude 3…

[蓝桥杯 2023 省 A] 平方差

题目链接 [蓝桥杯 2023 省 A] 平方差 题目描述 给定 L , R L,R L,R&#xff0c;问 L ≤ x ≤ R L \leq x \leq R L≤x≤R 有多少个 x x x 满足存在整数 y , z y,z y,z 使得 x y 2 − z 2 x y^2 - z^2 xy2−z2。 输入格式 输入一行包含两个整数 L , R L,R L,R&#x…

BUUCTF-Misc3

LSB1 1.打开附件 得到一张图片&#xff0c;像是某个大学的校徽 2.Stegsolve工具 根据标题LSB&#xff0c;可能是LSB隐写 放到Stegsolve中&#xff0c;点Analyse在点Data Extract 数据提取 因为是LSB隐写&#xff0c;发现含以.png结尾的图片 3.保存图片 4.得到flag 扫描二维…

一招教你优化TCP提高大文件传输效率

在当今企业的数据传输实践中&#xff0c;传统的传输控制协议&#xff08;TCP&#xff09;在处理大型文件传输时&#xff0c;其固有的可靠性和复杂性有时会导致效率不足。为了提升大文件传输的效率&#xff0c;对TCP进行优化成为了一个关键任务。 TCP传输的可靠性是其核心优势&a…

IoT技术有什么好处——青创智通

​随着科技的飞速发展&#xff0c;物联网&#xff08;IoT&#xff09;技术已经逐渐渗透到各个领域&#xff0c;特别是在企业运营中&#xff0c;其应用越来越广泛。那么&#xff0c;企业运用IoT到底有什么好处呢&#xff1f;本文将从提高效率、降低成本、创新商业模式、提升客户…

UnityShader常用算法笔记(颜色叠加混合、RGB-HSV-HSL的转换、重映射、UV序列帧动画采样等,持续更新中)

一.颜色叠加混合 1.Blend混合 // 正常&#xff0c;透明度混合 Normal Blend SrcAlpha OneMinusSrcAlpha //柔和叠加 Soft Additive Blend OneMinusDstColor One //正片叠底 相乘 Multiply Blend DstColor Zero //两倍叠加 相加 2x Multiply Blend DstColor SrcColor //变暗…

聊聊 HTTP 性能优化

哈喽大家好&#xff0c;我是咸鱼。 作为用户的我们在 “上网冲浪” 的时候总是希望快一点&#xff0c;尤其是抢演唱会门票的时候&#xff0c;但是现实并非如此&#xff0c;有时候我们会遇到页面加载缓慢、响应延迟的情况。 而 HTTP 协议作为互联网世界的基础&#xff0c;从网…

穷人想赚钱该怎么选打工VS创业?2024年如何把握新机遇?

在贫穷的困境中&#xff0c;打工与创业似乎成为了两条截然不同的道路&#xff0c;摆在每一个渴望改变命运的人面前。然而&#xff0c;这并非简单的选择题&#xff0c;而是一场关于勇气、智慧与机遇的较量。打工&#xff0c;对于许多人来说&#xff0c;是稳定且相对安全的收入来…

【TypeScript系列】类

类 背景阅读&#xff1a;类&#xff08;MDN&#xff09; TypeScript 对 ES2015 引入的 class 关键字提供了全面支持。 与其他 JavaScript 语言特性一样&#xff0c;TypeScript 添加了类型注解和其他语法&#xff0c;使你能够表达类和其他类型之间的关系。 类成员 下面是一个…

Aigtek前置微小信号放大器有什么作用

前置微小信号放大器是一种被广泛应用于无线通信、雷达、射频等领域中的低噪声放大器。相较于传统的放大器&#xff0c;前置微小信号放大器具有更高的灵敏度和更低的噪声系数。下面安泰Aigtek将介绍前置微小信号放大器的作用和意义。 一、前置微小信号放大器的作用 放大弱信号 前…

【golang】二叉树的遍历

本文使用golang实现二叉树的遍历&#xff0c;包含以下7种方法。 深度优先遍历 先序遍历 递归法非递归法 中序遍历 递归法非递归法 后序遍历 递归法非递归法 广度优先遍历 二叉树节点定义&#xff1a; type Node struct {Val intLeft *NodeRight *Node }深度优先遍历 先…

C语言实现回调函数

C语言实现回调函数 一、回调函数概念1.1 什么叫函数指针 二、回调函数案例 一、回调函数概念 回调函数就是一个被作为参数传递的函数。在C语言中&#xff0c;回调函数只能使用函数指针实现&#xff0c;在C、Python、ECMAScript等更现代的编程语言中还可以使用仿函数或匿名函数…