当前位置: 首页 > news >正文

娱乐网站名字/百度热度榜搜索趋势

娱乐网站名字,百度热度榜搜索趋势,电商网站开发资金预算,深圳如何优化网站文章目录一、泛型编程二、 函数模板三、类模板一、泛型编程 泛型编程:编写与类型无关的通用代码,代码复用的一种方法 在 C 中,我们可以通过函数重载实现通用的交换函数 Swap ,但是有一些缺点 重载函数只有类型不同,…

文章目录

  • 一、泛型编程
  • 二、 函数模板
  • 三、类模板

一、泛型编程

泛型编程:编写与类型无关的通用代码,代码复用的一种方法

在 C++ 中,我们可以通过函数重载实现通用的交换函数 Swap ,但是有一些缺点

  • 重载函数只有类型不同,使得代码复用率不好,需要使用新类型时,就必须自己写该类型的重载函数
  • 当有一个重载函数出错时,可能需要检查所有的函数
void Swap(int& a, int& b)
{int tmp = a;a = b;b = tmp;
}void Swap(double& a, double& b)
{double tmp = a;a = b;b = tmp;
}

于是 C++ 中引入了模板,可以给函数或类设置模板类型参数,模板类型参数在函数或类中表示广泛的类型,在使用时会替换为正在使用的这个类型

//class 关键字可以换成 typename 关键字,注意:这里不能使用 struct 关键字
template<class T1, class T2,...> //T1、T2,... 是模板类型参数,表示广泛的类型

模板是泛型编程的基础,给函数或类添加模板类型参数,就称为 函数模板类模板

模板是与具体类型无关的通用代码,当我们使用模板并填充某种类型时,编译器就会根据该类型实例化出该模板样式的代码

二、 函数模板

函数模板是与具体类型无关的函数代码,当我们调用模板函数时,编译器会根据实参的类型实例化出该函数模板样式的代码

于是交换函数的通用版本就可以用函数模板简单的实现了

#include <iostream>using namespace std;//T 代表广泛的类型,是调用该模板函数时实参的类型
template<class T> void Swap(T& a, T& b)
{T tmp = a;a = b;b = tmp;
}int main()
{int a1 = 1, b1 = 2;Swap(a1, b1); //向 Swap 模板函数填充 int,编译器自动生成 int 版 Swapcout << a1 << " " << b1 << endl;	//输出 2 1double a2 = 1.11, b2 = 2.22;Swap(a2, b2); //向 Swap 模板函数填充 double,编译器自动生成 double 版 Swapcout << a2 << " " << b2 << endl;	//输出 2.22 1.11char a3 = 'a', b3 = 'b';Swap(a3, b3); //向 Swap 模板函数填充 char,编译器自动生成 char 版 Swapcout << a3 << " " << b3 << endl;	//输出 b areturn 0;
}

在编译阶段,编译器根据实参的类型实例化出该函数模板样式的函数代码
在这里插入图片描述
在调用模板函数时:

  • 编译器根据实参类型填充模板,然后实例化出实参类型的函数模板样式的代码,这种方式称为 隐式实例化

  • 在函数名和参数之间加上 <type>,指定类型 type 填充模板,然后实例化出 type 类型的函数模板样式的代码,这种方式称为 显示实例化

#include <iostream>using namespace std;template<class T> void Swap(T& a, T& b)
{T tmp = a;a = b;b = tmp;
}int main()
{int a = 1, b = 2;Swap<int>(a, b); //指定 int 类型填充模板函数 Swap,编译器自动生成 int 版 Swapcout << a << " " << b << endl;	//输出 2 1return 0;
}

其实库中已经实现了通用的交换函数 swap,以后直接使用即可
在这里插入图片描述

非模板函数可以和函数模板同名,并且允许函数模板实例化出的函数和非模板函数一样

#include <iostream>using namespace std;int Add(const int& left, const int& right)
{return left + right;
}template<class T>
T Add(const T& left, const T& right)
{return left + right;
}int main()
{//默认调用非模板函数cout << Add(1, 2) << endl; //输出 3//可以实例化出和非模板函数一样的函数//调用函数模板实例化的 int 版cout << Add<int>(1, 2) << endl; //输出 3return 0;
}

调用普通函数时,如果实参和形参数类型不同,可以隐式类型转换,但在以隐式实例化的方式调用模板函数时,如果实参和形参类型不同,不会隐式类型转换

当普通函数和模板函数重名时,并且函数调用传递的实参类型和普通函数的形参类型不匹配时,如果函数模板可以实例化出更匹配参数类型的函数,则会调用函数模板实例化的函数,否则调用普通函数

#include <iostream>using namespace std;int Add(const int& left, const int& right)
{return left + right;
}template<class T1, class T2>
T1 Add(const T1& left, const T2& right)
{return left + (T1)right;
}int main()
{//当函数模板可以实例化出更匹配参数的函数时,调用函数模板实例化的函数Add(1, 2.2);return 0;
}

三、类模板

类模板是与具体类型无关的类代码,用模板类实例化对象时,需要在类名后加上 <type>,指定类型 type 填充模板,然后实例化出 type 类型的类模板样式的代码

于是 Stack 类的通用版本就可以用类模板简单的实现了

#include <iostream>using namespace std;template<class T> class Stack
{
public:Stack(int capacity = 4): _a(new T[capacity]), _top(0), _capacity(capacity){}~Stack();private:T* _a;int _top;int _capacity;
};//当成员函数在类外定义时,需要加上模板类型参数列表
//注意:Stack<T>(T 表示广泛的类型) 才是模板类的类名
template<class T>  Stack<T>::~Stack()
{if (_a){delete[] _a;_a = nullptr;_top = _capacity = 0;}
}int main()
{//Stack<int> 为存储整形元素的栈类的类型名Stack<int> s1; //指定 int 类型填充模板类 Stack,编译器自动生成 int 版 Stack//Stack<char> 为存储字符元素的栈类的类型名Stack<char> s2;//指定 char 类型填充模板类 Stack,编译器自动生成 char 版 Stackreturn 0;
}

注意:使用类模板定义对象时,没有东西可以识别为类模板所需要填充的类型,因此类模板只能显示实例化

模板和函数重载的底层原理是一样的,只是重复的事情交给了编译器而已

相关文章:

C++ 模板

文章目录一、泛型编程二、 函数模板三、类模板一、泛型编程 泛型编程&#xff1a;编写与类型无关的通用代码&#xff0c;代码复用的一种方法 在 C 中&#xff0c;我们可以通过函数重载实现通用的交换函数 Swap &#xff0c;但是有一些缺点 重载函数只有类型不同&#xff0c;…...

JWT安全漏洞以及常见攻击方式

前言 随着web应用的日渐复杂化&#xff0c;某些场景下&#xff0c;仅使用Cookie、Session等常见的身份鉴别方式无法满足业务的需要&#xff0c;JWT也就应运而生&#xff0c;JWT可以有效的解决分布式场景下的身份鉴别问题&#xff0c;并且会规避掉一些安全问题&#xff0c;如CO…...

华为OD机试题 - 最小施肥机能效(JavaScript)

最近更新的博客 华为OD机试题 - 任务总执行时长(JavaScript) 华为OD机试题 - 开放日活动(JavaScript) 华为OD机试 - 最近的点 | 备考思路,刷题要点,答疑 【新解法】 华为OD机试题 - 最小步骤数(JavaScript) 华为OD机试题 - 任务混部(JavaScript) 华为OD机试题 - N 进…...

Python(1)变量的命名规则

目录 1.变量的命名原则 3.内置函数尽量不要做变量 4.删除变量和垃圾回收机制 5.结语 参考资料 1.变量的命名原则 ①由英文字母、_(下划线)、或中文开头 ②变量名称只能由英文字母、数字、下画线或中文字所组成。 ③英文字母大小写不相同 实例&#xff1a; 爱_aiA1 print(…...

Shiro1.9学习笔记

文章目录一、Shiro概述1、Shiro简介1.1 介绍1.2 Shiro特点2、Shiro与SpringSecurity的对比3、Shiro基本功能4、Shiro原理4.1 Shiro 架构(外部)4.2 shiro架构(内部)二、Shiro基本使用1、环境准备2、登录认证2.1 登录认证概念2.2 登录认证基本流程2.3 登录认证实例2.4 身份认证源…...

2.5|iot|嵌入式Linux系统开发与应用|第4章:Linux外壳shell脚本程序编程

1.shell基础 Shell是Linux操作系统内核的外壳&#xff0c;它为用户提供使用操作系统的命令接口。 用户在提示符下输入的每个命令都由shell先解释然后发给Linux内核&#xff0c;所以Linux中的命令通称为shell命令。 通常我们使用shell来使用Linux操作系统。Linux系统的shell是…...

九龙证券|连续七周获加仓,四大行业成“香饽饽”!

本周17个申万职业北上资金持股量环比增加。 北上资金抢筹铝业龙头 本周A股商场全体冲高回落&#xff0c;沪指收跌1.12%&#xff0c;深成指跌2.18%&#xff0c;创业板指跌3.76%。北上资金周内小幅净流入。在大盘体现较差的周四周五&#xff0c;北上资金别离逆市回流67.94亿元、…...

210天从外包踏进华为跳动那一刻,我泪目了

前言 没有绝对的天才&#xff0c;只有持续不断的付出。对于我们每一个平凡人来说&#xff0c;改变命运只能依靠努力幸运&#xff0c;但如果你不够幸运&#xff0c;那就只能拉高努力的占比。 2021年4月&#xff0c;我有幸成为了华为的一名高级测试工程师&#xff0c;正如标题所…...

CMake 引入第三方库

CMake 引入第三方库 在 CMake 中&#xff0c;如何引入第三方库是一个常见的问题。在本文中&#xff0c;我们将介绍 CMake 中引入第三方库的不同方法&#xff0c;以及它们的优缺点。 1. 使用 find_package 命令 在 CMake 中&#xff0c;使用 find_package 命令是最简单和最常…...

软考中级-面向对象

面向对象基础&#xff08;1&#xff09;类类分为三种&#xff1a;实体类&#xff08;世间万物&#xff09;、接口类&#xff08;又称边界类&#xff0c;提供用户与系统交互的方式&#xff09;、控制类&#xff08;前两类之间的媒介&#xff09;。对象&#xff1a;由对象名数据&…...

Linux 系统构成:bootloader、kernel、rootfs

写在前面&#xff1a; 本文章旨在总结备份、方便以后查询&#xff0c;由于是个人总结&#xff0c;如有不对&#xff0c;欢迎指正&#xff1b;另外&#xff0c;内容大部分来自网络、书籍、和各类手册&#xff0c;如若侵权请告知&#xff0c;马上删帖致歉。 目录前言bootloaderk…...

SpringCloud - Eureka注册发现

目录 提供者与消费者 Eureka原理分析 搭建Eureka服务 服务注册 服务发现 提供者与消费者 服务提供者&#xff1a; 一次业务中&#xff0c;被其它微服务调用的服务(提供接口给其它微服务)服务消费者&#xff1a; 一次业务中&#xff0c;调用其它微服务的服务(调用其它微服务…...

WampServer安装教程

文章目录简介&#xff1a;官网地址安装步骤&#xff1a;我是阿波&#xff0c;学习PHP记录一下笔记&#xff0c;如果对你有帮助&#xff0c;欢迎一键三连&#xff0c;谢谢&#xff01; 简介&#xff1a; WampServer是一个用于Windows操作系统的Web开发环境&#xff0c;其名称来…...

Go语言泛型基础

泛型 Go 并不是一种静止的、一成不变的编程语言。新的功能是在经过大量的讨论和实验后慢慢采用的。最初的 Go1.0发布以来&#xff0c;Go语言习惯的模式已经发生了重大变化1.7的context、1.11的modules、1.13 error嵌套等Go的 1.18 版本包括了类型参数的实现&#xff0c;也就是…...

基于android的中医养生app

需求信息&#xff1a; 中医健康养生APP分为四大模块&#xff0c;其中个人中心又分为4大块&#xff0c;游客用户个人中心是空白的。 上图为养生知识推广普及模块的功能结构图。 在养生知识推广普及模块界面&#xff0c;用户可以选择自己感兴趣的模块进行文章浏览&#xff0c;文章…...

2023美赛C代码思路结果【全部更新完毕】注释详尽

C题已完成全部代码&#xff0c;注释详尽&#xff0c;并增加扰动项&#xff0c;保证大家的结果不会撞 需要全部问题的可以点击&#xff1a;https://www.jdmm.cc/file/2708697/ 下面贴出核心代码&#xff1a; -- coding: utf-8 -- TODO: 入口函数 import numpy as np from…...

实现8086虚拟机(二)——模拟CPU和内存

文章目录CPU 架构EU&#xff08;执行单元&#xff09;BIU&#xff08;总线接口单元&#xff09;小结一下模拟内存模拟 BIU模拟 EU模拟 CPU总结要模拟 8086 CPU 运行&#xff0c;必须知道 CPU 的一些知识。下文的知识点都来自《Intel_8086_Family_Users_Manual 》。CPU 架构 微…...

Windows7下使用VMware11.1.1安装ubuntu-16.04.7

一、说明二、安装说明三、安装步骤详解1、先安装VMware软件2、创建虚拟机3、编辑虚拟机4、开启虚拟机&#xff0c;初始化Linux系统一、说明 虽然VMware和ubuntu最新版已经很高了&#xff0c;我这电脑由于是win7配值还低&#xff0c;所以采用低版本来安装 VMware版本&#xff1…...

基于SSM框架的CMS内容管理系统的设计与实现

基于SSM框架的CMS内容管理系统的设计与实现 ✌全网粉丝20W,csdn特邀作者、博客专家、CSDN新星计划导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取项目下载方式&#x1f345; 一、项目…...

华为OD机试 - 运动会 | 机试题算法思路 【2023】

最近更新的博客 华为OD机试 - 自动曝光(Python) | 机试题算法思路 【2023】 华为OD机试 - 双十一(Python) | 机试题算法思路 【2023】 华为OD机试 - 删除最少字符(Python) | 机试题算法思路 【2023-02】 华为OD机试 - Excel 单元格数值统计(Python) | 机试题算法思路 …...

(C语言篇)扫雷的实现

文章目录 一、开始时的基本思维&#xff1a;二、进入游戏的逻辑(test.c文件中实现)三、游戏的编写 1. 初始化棋盘 I. test.cII. game.hIII. game.c 2.打印棋盘 I. test.cII. game.hIII. game.c 3.布置雷 I. test.cII. game.hIII. game.c 4.排查雷 I. test.cII. game.hIII. gam…...

华为手表开发:WATCH 3 Pro(8)获取位置服务

华为手表开发&#xff1a;WATCH 3 Pro&#xff08;8&#xff09;获取位置服务初环境与设备文件夹&#xff1a;文件新增第二页面geolocation.hmlgeolocation.js修改首页 -> 新建按钮 “ 跳转 ”index.hmlindex.js 引用包&#xff1a;system.router首页效果点击结果按钮跳转后…...

AnLogicFPGA设计的时序约束及时序收敛

本篇博文讲了三个内容&#xff1a;时序约束基本概念、时序约束命令、时序收敛技巧 时序约束基本概念 时序设计的实质就是满足每一个触发器的建立&#xff08;setup&#xff09;时间和保持&#xff08;hold&#xff09;时间。 建立时间(Tsu) 触发器的时钟信号沿到来以前&…...

ubuntu22.10安装sogou输入法后不能输入中文字符(可以输入中文标点符号)

问题描述 想在ubuntu22.10系统上安装sogou中文输入法&#xff0c;按照sogou输入法网站给出的步骤安装后&#xff0c;发现无法输入中文字符&#xff0c;但是可以输入中文标点符号。 sogou网站&#xff1a;https://shurufa.sogou.com/linux/guide 寻找答案1 通过各种百度和必…...

基于微信小程序的生活日用品交易平台 的设计与实现

基于微信小程序的生活日用品交易平台 的设计与实现 ✌全网粉丝20W,csdn特邀作者、博客专家、CSDN新星计划导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取项目下载方式&#x1f345; 一…...

15:高级篇 - CTK 事件与监听

作者: 一去、二三里 个人微信号: iwaleon 微信公众号: 高效程序员 生命周期层事件 在 Plugin 生命周期的不同状态相互转换时,CTK Plugin Framework 会发出各种不同的事件,以供事先注册好的事件监听器处理,这些事件被称为“生命周期层事件”。CTK Plugin Framework 支持的…...

SpringBoot Notes

文章目录1 SpringBootWeb快速入门1.1Spring官网1.2 Web分析2. HTTP协议2.1 HTTP介绍34 SpringBootWeb请求响应5 响应6 分层解耦6.1 三层架构6.1.1 三层架构介绍6.1.2 基于三层架构的程序执行流程&#xff1a;6.1.3 代码拆分6.2 分层解耦6.2.1 内聚、耦合6.2.2 解耦思路6.3 IOC&…...

CoreDNS

目录 文章目录目录本节实战前言1、环境变量2、DNS1.DNS 解析过程2.根域名服务器3.顶级域名服务器4.权威性域名服务器5.dig 域名3、CoreDNS1.CoreDNS 扩展配置&#xff08;1&#xff09;开开启日志服务&#xff08;2&#xff09;特定域名使用自定义 DNS 服务器&#xff08;3&…...

码农饭碗不保——ChatGPT正在取代Coder

码农饭碗不保——ChatGPT正在取代Coder 最近被OpenAI的ChatGPT刷屏了。我猜你已经读了很多关于ChatGPT的文章&#xff0c;不需要再介绍了。假如碰巧您还不太了解ChatGPT是什么&#xff0c;可以先看一下这篇文章&#xff0c;然后再回来继续。 与ChatGPT对话很有趣&#xff0c;…...

PAT (Advanced Level) Practice 1004 Counting Leaves

1004 Counting Leaves题目翻译代码分数 30 作者 CHEN, Yue 单位 浙江大学 A family hierarchy is usually presented by a pedigree tree. Your job is to count those family members who have no child. Input Specification: Each input file contains one test case. Eac…...