【c++】 模板初阶

泛型编程

写一个交换函数,在学习模板之前,为了匹配不同的参数类型,我们可以利用函数重载来实现。

代码语言:javascript

AI代码解释

void Swap(int& a, int& b) { int c = a; a = b; b = c; } void Swap(char& a, char& b) { char c = a; a = b; b = c; } void Swap(double& a, double& b) { double c = a; a = b; b = c; } //...

虽然这样似乎解决了问题,但是这样的设计写着太过麻烦,只要出现新类型就需要写新的函数,代码的复用率很低。有没有什么可以让我们一劳永逸呢?模板就可以实现这一功能。

这种通过抽象和模板化来编写可重用和灵活的代码以此提升代码的可读性和维护性,同时避免代码重复的方式称为泛型编程。

函数模板

函数模板是c++中的一类机制,通过在函数定义中使用模板参数,我们可以编写一个函数,而在调用时根据实际参数的类型自动生成相应的版本。

代码语言:javascript

AI代码解释

template <class T> void Swap(T& a, T& b) { T c = a; a = b; b = c; }

这样编译器就可以根据传入的参数类型来生成对应的Swap()函数,大大提高了代码的复用率。下面我们来尝试运行一下。

代码语言:javascript

AI代码解释

template <class T> void Swap(T& a, T& b) { T c = a; a = b; b = c; } int main() { int a,b; a = 1; b = 2; double c, d; c = 0.0; d = 1.2; Swap(a, b); Swap(c, d); cout << a << " " << b << endl; cout << c << " " << d << endl; return 0; }

我们发现,调用Swap()之后,int类型的ab和double类型的cd都完成了交换。但是他们是否调的是同一个函数呢?

转到反汇编:

我们发现两次调用的是不同的Swap()函数,根据传入参数类型的不同 ,编译器会生成不同的函数。然后再调用生成的函数。

函数模板的实例化

通过函数模板生成对应函数的过程叫做函数实例化。

当模板的参数只有一个时,却传入了不同类型的变量,编译器无法推导出T的类型,出现了推导错误

www.dongchedi.com/article/7594239818788389438
www.dongchedi.com/article/7594239354315817496
www.dongchedi.com/article/7594242086645187097
www.dongchedi.com/article/7594242305499382296
www.dongchedi.com/article/7594241690249167385
www.dongchedi.com/article/7594243296965411352
www.dongchedi.com/article/7594244056763695678
www.dongchedi.com/article/7594243281903649342


www.dongchedi.com/article/7594176187270693401
www.dongchedi.com/article/7594176654025589273
www.dongchedi.com/article/7594174513613636120
www.dongchedi.com/article/7594173614161723966
www.dongchedi.com/article/7594174316762726937
www.dongchedi.com/article/7594174486359114264
www.dongchedi.com/article/7594172209028399641
www.dongchedi.com/article/7594172028136112665
www.dongchedi.com/article/7594170708973158937
www.dongchedi.com/article/7594171822011318809
www.dongchedi.com/article/7594169237096940057
www.dongchedi.com/article/7594169267902857753
www.dongchedi.com/article/7594154183356727870
www.dongchedi.com/article/7594153895329448472
www.dongchedi.com/article/7594153335339647550
www.dongchedi.com/article/7594149462356804121
www.dongchedi.com/article/7594143242124427801
www.dongchedi.com/article/7594143151032959513
www.dongchedi.com/article/7594143310076477976
www.dongchedi.com/article/7594143261762585112
www.dongchedi.com/article/7594143234042380824
www.dongchedi.com/article/7594143047861420569
www.dongchedi.com/article/7594143261762257432
www.dongchedi.com/article/7594113295314305561
www.dongchedi.com/article/7594111799855956505
www.dongchedi.com/article/7594110342540673598
www.dongchedi.com/article/7594110249179578904
www.dongchedi.com/article/7594109373581492761
www.dongchedi.com/article/7594199698655724056
www.dongchedi.com/article/7594197415100793369
www.dongchedi.com/article/7594197322150904382
www.dongchedi.com/article/7594196529834181145
www.dongchedi.com/article/7594196856478368281
www.dongchedi.com/article/7594195826612781592
www.dongchedi.com/article/7594195431069762072
www.dongchedi.com/article/7594195431069270552
www.dongchedi.com/article/7594179258625802776
www.dongchedi.com/article/7594177577032991257
www.dongchedi.com/article/7594179258625409560
www.dongchedi.com/article/7594177972484309529
www.dongchedi.com/article/7594176579102884414
www.dongchedi.com/article/7594177062877839897
www.dongchedi.com/article/7594174721596473881
www.dongchedi.com/article/7594175192449008153
www.dongchedi.com/article/7594173652875444760
www.dongchedi.com/article/7594172550394069566
www.dongchedi.com/article/7594172678253265470
www.dongchedi.com/article/7594171407253275198
www.dongchedi.com/article/7594169982704173593
www.dongchedi.com/article/7594171805393650201
www.dongchedi.com/article/7594171076024812094
www.dongchedi.com/article/7594169163703271998
www.dongchedi.com/article/7594155915663180313
www.dongchedi.com/article/7594152900747100734
www.dongchedi.com/article/7594151966180426264
www.dongchedi.com/article/7594148426036904473
www.dongchedi.com/article/7594143100311192088

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

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

相关文章

StructBERT零样本分类器优化指南:提升实时分类性能

StructBERT零样本分类器优化指南&#xff1a;提升实时分类性能 1. 引言&#xff1a;AI 万能分类器的崛起与挑战 随着自然语言处理技术的不断演进&#xff0c;零样本文本分类&#xff08;Zero-Shot Text Classification&#xff09; 正在成为企业快速构建智能语义系统的首选方…

Windows 10系统优化终极指南:深度解析Win10BloatRemover工具

Windows 10系统优化终极指南&#xff1a;深度解析Win10BloatRemover工具 【免费下载链接】Win10BloatRemover Configurable CLI tool to easily and aggressively debloat and tweak Windows 10 by removing preinstalled UWP apps, services and more. Originally based on th…

【c++】AVL树模拟实现

AVL树是最先被发明出来的自平衡二叉查找树&#xff0c;在1962由前苏联科学家G. M. Adelson-Velsky和E. M. Landis在论文中发表。AVL树中引入了平衡因子&#xff0c;每一个节点都有一个平衡因子&#xff08;一般是右子树高度 - 左子树高度&#xff09;&#xff1b;AVL树要求左右…

PvZ Toolkit植物大战僵尸修改器:轻松打造你的专属游戏体验

PvZ Toolkit植物大战僵尸修改器&#xff1a;轻松打造你的专属游戏体验 【免费下载链接】pvztoolkit 植物大战僵尸 PC 版综合修改器 项目地址: https://gitcode.com/gh_mirrors/pv/pvztoolkit 嘿&#xff0c;亲爱的植物大战僵尸玩家&#xff01;&#x1f331; 你是否曾经…

暗黑2单机终极秘籍:5招解锁隐藏玩法

暗黑2单机终极秘籍&#xff1a;5招解锁隐藏玩法 【免费下载链接】PlugY PlugY, The Survival Kit - Plug-in for Diablo II Lord of Destruction 项目地址: https://gitcode.com/gh_mirrors/pl/PlugY 还在为暗黑破坏神2单机模式的种种限制而束手束脚吗&#xff1f;每次看…

蓝奏云直链解析工具:简化文件下载的智能解决方案

蓝奏云直链解析工具&#xff1a;简化文件下载的智能解决方案 【免费下载链接】LanzouAPI 蓝奏云直链&#xff0c;蓝奏api&#xff0c;蓝奏解析&#xff0c;蓝奏云解析API&#xff0c;蓝奏云带密码解析 项目地址: https://gitcode.com/gh_mirrors/la/LanzouAPI 还在为蓝奏…

C++ Vector 核心问题精讲

解题思路 由于数组是非严格递增的&#xff0c;重复的元素必然是相邻的。我们可以用两个指针&#xff1a;慢指针 prev&#xff1a;标记 “已处理的无重复元素” 的最后一个位置。快指针 curr&#xff1a;遍历数组&#xff0c;寻找新的、未出现过的元素。在这里插入图片描述结合 …

数字电路实验驱动继电器控制:操作指南

用数字电路控制真实世界&#xff1a;继电器驱动实战全解析你有没有试过用一个单片机IO口&#xff0c;点亮家里220V的台灯&#xff1f;听起来像魔法&#xff0c;其实原理并不复杂——关键就在于继电器。它是连接弱电逻辑与强电负载之间的“桥梁”。在数字电路实验中&#xff0c;…

专业级手机摄像头集成方案:DroidCam OBS Plugin深度解析

专业级手机摄像头集成方案&#xff1a;DroidCam OBS Plugin深度解析 【免费下载链接】droidcam-obs-plugin DroidCam OBS Source 项目地址: https://gitcode.com/gh_mirrors/dr/droidcam-obs-plugin 在视频制作和直播领域&#xff0c;高质量的摄像头设备往往意味着高昂的…

emwin界面缩放适配方案探讨

emWin界面缩放适配&#xff1a;从原理到实战的系统性方案在嵌入式图形界面开发中&#xff0c;一个看似简单却极具挑战的问题是——如何让同一套UI代码&#xff0c;在不同尺寸、不同分辨率的屏幕上都“长得好看”&#xff1f;这并不是简单的“放大缩小”就能解决的事。按钮会不会…

FlightSpy智能机票追踪系统:数据驱动的出行决策革命

FlightSpy智能机票追踪系统&#xff1a;数据驱动的出行决策革命 【免费下载链接】flight-spy Looking for the cheapest flights and dont have enough time to track all the prices? 项目地址: https://gitcode.com/gh_mirrors/fl/flight-spy 在传统机票预订模式中&a…

StructBERT零样本分类教程:领域适应方法

StructBERT零样本分类教程&#xff1a;领域适应方法 1. 引言 1.1 AI 万能分类器 在当今信息爆炸的时代&#xff0c;文本数据的自动化处理已成为企业智能化转型的核心需求。无论是客服工单、用户反馈、新闻资讯还是社交媒体内容&#xff0c;都需要高效准确地进行分类打标。然…

QMC音频解密终极指南:三分钟解锁加密音乐文件

QMC音频解密终极指南&#xff1a;三分钟解锁加密音乐文件 【免费下载链接】qmc-decoder Fastest & best convert qmc 2 mp3 | flac tools 项目地址: https://gitcode.com/gh_mirrors/qm/qmc-decoder 还在为无法播放的QMC加密音频而烦恼吗&#xff1f;这些看似"…

PvZ Toolkit实战手册:解锁植物大战僵尸无限可能

PvZ Toolkit实战手册&#xff1a;解锁植物大战僵尸无限可能 【免费下载链接】pvztoolkit 植物大战僵尸 PC 版综合修改器 项目地址: https://gitcode.com/gh_mirrors/pv/pvztoolkit 还在为游戏资源不足而烦恼吗&#xff1f;想要轻松应对无尽模式的极限挑战&#xff1f;Pv…

GPU内存诊断专家:MemTestCL完全使用指南与深度解析

GPU内存诊断专家&#xff1a;MemTestCL完全使用指南与深度解析 【免费下载链接】memtestCL OpenCL memory tester for GPUs 项目地址: https://gitcode.com/gh_mirrors/me/memtestCL MemTestCL是一款专业的OpenCL内存测试工具&#xff0c;专门用于检测GPU、CPU和加速器中…

Nrfr免Root工具:全球漫游网络优化的终极解决方案

Nrfr免Root工具&#xff1a;全球漫游网络优化的终极解决方案 【免费下载链接】Nrfr &#x1f30d; 免 Root 的 SIM 卡国家码修改工具 | 解决国际漫游时的兼容性问题&#xff0c;帮助使用海外 SIM 卡获得更好的本地化体验&#xff0c;解锁运营商限制&#xff0c;突破区域限制 …

移动端PDF预览完整解决方案:告别兼容性困扰

移动端PDF预览完整解决方案&#xff1a;告别兼容性困扰 【免费下载链接】pdfh5 项目地址: https://gitcode.com/gh_mirrors/pdf/pdfh5 在移动互联网时代&#xff0c;PDF文档的在线预览已成为各类应用的标配功能。然而传统的PDF预览方案往往存在加载缓慢、交互体验差、兼…

Zotero-reference插件复制功能失效的终极解决方案指南

Zotero-reference插件复制功能失效的终极解决方案指南 【免费下载链接】zotero-reference PDF references add-on for Zotero. 项目地址: https://gitcode.com/gh_mirrors/zo/zotero-reference 最近很多用户在升级Zotero 7.0版本后遇到了一个棘手问题&#xff1a;点击文…

yuzu模拟器输入精度调校指南:从基础校准到专业级优化

yuzu模拟器输入精度调校指南&#xff1a;从基础校准到专业级优化 【免费下载链接】yuzu 任天堂 Switch 模拟器 项目地址: https://gitcode.com/GitHub_Trending/yu/yuzu 在竞技游戏《Splatoon 3》中&#xff0c;每一帧的精准瞄准都至关重要&#xff0c;而《塞尔达传说&a…

脉冲信号处理机制:数字电路实验从零实现

脉冲信号处理机制&#xff1a;从机械按钮到数码管显示的完整数字电路实践你有没有试过按下一次按钮&#xff0c;结果计数器却加了好几次&#xff1f;或者明明只按了一下&#xff0c;LED却闪烁不停&#xff1f;这背后&#xff0c;很可能不是你的电路“坏了”&#xff0c;而是你还…