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

【C++】模板初阶

🍅讨厌废话,直接上车

☃️1.泛型编程

void Swap(int& left, int& right)
{
int temp = left;
left = right;
right = temp;
}
void Swap(double& left, double& right)
{
double temp = left;
left = right;
right = temp;
}
void Swap(char& left, char& right)
{
char temp = left;
left = right;
right = temp;
}

就问你写这么多交换函数烦不烦....
虽然函数重载很nice,但是架不住这么墨迹

做一个敏锐的程序员,识别出函数有很多相像的地方,然后写一个普适的模板(就像是活字印刷术的模板)

 

 

☃️2.函数模板

 🐝2.1原理

函数模板代表了一个函数家族

该函数模板与类型无关

在使用时被参数化,根据实参类型产生函数的特定类型版本

格式:

template<typename T1, typename T2,......,typename Tn> 把<>里面的template换成class也可以的
返回值类型 函数名(参数列表){}

template<typename T>
void Swap(T& left, T& right)
{T temp = left;left = right;right = temp;
}

 爽歪歪!!!!!!!!!!

当然也可以定义多个模板参数,用逗号分隔

template<class T, class  Y>
T Add(T left, Y right)
{return left + right;
}

 

 🐝2.2实例化

用不同类型的参数使用函数模板时,称为函数模板的实例化

template<class T, class  Y>
T Add(T left, Y right)
{return left + right;
}
int main()
{Add(1, 2);return 0;
}

但是要注意原理 

template<class T>
void Swap(T& X, T& Y)
{T tmp = X;X = Y;Y = tmp;
}
int main()
{int a = 1, b = 2;Swap(a, b);double c = 1.1, d = 2.2;Swap(c, d);
}

 

 其实调用的并不是一个函数,只不过int double两个类型的Swap编译器帮我们写完了!

其实库函数中有个直接的交换函数 swap(a,b);

 

头文件#<iostream>中就包含了头文件#<algorithm>

 模板参数实例化分为:隐式实例化和显式实例化。注意格式就好

☃️3.类模板

类模板是泛化的类,模板类是类模板的实例化

template<class T1, class T2, ..., class Tn>
class 类模板名
{
// 类内成员定义
};

 🐝3.1原理

template<class T>
class Stack
{
public:Stack(int capacity = 4){_a = new T[capacity];}
private:T* _a;//..
};
int main()
{Stack<int>st1;Stack<double>st2;return 0;
}

相关文章:

【C++】模板初阶

&#x1f345;讨厌废话&#xff0c;直接上车 ☃️1.泛型编程 void Swap(int& left, int& right) { int temp left; left right; right temp; } void Swap(double& left, double& right) { double temp left; left right; right temp; } void Swap(char&…...

vue+nodejs考研资料分享系统vscode - Visual Studio Code

前端技术&#xff1a;nodejsvueelementui,视图层其实质就是vue页面&#xff0c;通过编写vue页面从而展示在浏览器中&#xff0c;编写完成的vue页面要能够和控制器类进行交互&#xff0c;从而使得用户在点击网页进行操作时能够正常。 Express 框架于Node运行环境的Web框架, 目 …...

LeetCode_单周赛_332

6354. 找出数组的串联值 题意 将数组首尾元素接在一起&#xff0c;就是串联值。 串联之后删除&#xff0c;如果只剩下一个元素&#xff0c;加上这个元素即可 双指针&#xff0c;从首和尾向中间移动即可 code **注意&#xff1a;**用 long 没看题目用了 int wa了一发 clas…...

[LeetCode周赛复盘] 第 332 场周赛20230212

[LeetCode周赛复盘] 第 332 场周赛20230212 一、本周周赛总结二、 [Easy] 6354. 找出数组的串联值1. 题目描述2. 思路分析3. 代码实现三、[Medium] 6355. 统计公平数对的数目1. 题目描述2. 思路分析3. 代码实现四、[Medium] 6356. 子字符串异或查询1. 题目描述2. 思路分析3. 代…...

C++轻量级RPC库RpcCore

C轻量级的RPC库&#xff0c;可用于任何项目中&#xff0c;甚至单片机。 方便平台直接相互进行功能调用。 基于asio的实现 asio_net 也可用在esp32适用于ESP32/ESP8266的实现 esp_rpc 目前也有一些轻量的库&#xff0c;参考了protobuf&#xff08;或者依赖它&#xff09;&…...

Mysql的视图

视图的特点&#xff1a; 1.视图可以看做一个虚拟的表&#xff0c;本身是不存储数据的。 视图的本质可以看作是存储起来的select语句 2.视图中涉及到的表都统称为基表 3.针对视图多DML操作&#xff0c;会影响到对应基表中的数据。反之亦然 4.视图本身的删除&#xff0c;不会…...

2/12考试总结

时间安排 8:30–8:50 读题&#xff0c;T1 不知道是个啥,T2是个dp &#xff0c;T3可能也是 dp 之类的。 8:50–9:30 T1&#xff0c;读了好几遍才理解了题意&#xff0c;对于部分分有爆搜。考虑正解&#xff0c;想到预处理后O(1) 查询&#xff0c;问题是如何由已知的信息得到所有…...

第三章虚拟机的克隆,快照,迁移删除

1.虚拟机的克隆 如果你已经安装了一台linux操作系统&#xff0c;你还想再更多的&#xff0c;没有必要再重新安装&#xff0c;你只需要克 隆就可以&#xff0c;看演示。 方式1&#xff0c;直接拷贝一份安装好的虚拟机文件,再用虚拟机打开这个文件方式2&#xff0c;使用vmware的…...

华为OD机试 - 任务总执行时长(Python)| 真题含思路

任务总执行时长 题目 任务编排服务负责对任务进行组合调度。 参与编排的任务又两种类型, 其中一种执行时长为taskA, 另一种执行时长为taskB。 任务一旦开始执行不能被打断,且任务可连续执行。 服务每次可以编排 num 个任务。 请编写一个方法,生成每次编排后的任务所有可…...

LeetCode 热题 C++ 114. 二叉树展开为链表

给你二叉树的根结点 root &#xff0c;请你将它展开为一个单链表&#xff1a; 展开后的单链表应该同样使用 TreeNode &#xff0c;其中 right 子指针指向链表中下一个结点&#xff0c;而左子指针始终为 null 。展开后的单链表应该与二叉树 先序遍历 顺序相同。 示例 1&#xf…...

Spring的事务控制-基于AOP的声明式事务控制

Spring的事务控制-基于AOP的声明式事务控制 Spring事务编程概述 事务是开发中必不可少的东西&#xff0c;使用JDBC开发时&#xff0c;我们使用connection对事务进行控制&#xff0c;使用MyBatis时&#xff0c;我们使用SqlSession对事务进行控制&#xff0c;缺点就是&#xff…...

SSO(单点登陆)

Single Sign On 一处登陆、处处可用 0、前置概念&#xff1a; 1&#xff09;、单点登录业务介绍 早期单一服务器&#xff0c;用户认证。 缺点&#xff1a;单点性能压力&#xff0c;无法扩展 分布式&#xff0c; SSO(single sign on)模式 解决 &#xff1a; 用户身份信息独…...

线程和QObjects

QObject的可重入性&#xff1a; QThread继承了QObject&#xff0c;它发出信号以指示线程开始或完成执行&#xff0c;并提供一些插槽。 QObjects可以在多个线程中使用发出调用其他线程中槽的信号&#xff0c;并将事件发布到在其他线程中“活动”的对象。这是可能的&#xff0…...

最新中文版FL Studio21水果软件下载安装图文教程

FL Studio是目前流行广泛使用人数最多音乐编曲制作软件&#xff0c;这款软件相信广大网友并不陌生&#xff0c;今天带来的是FL中文版本&#xff0c;所有的功能都能在线编辑&#xff0c;用户直接就能操作&#xff0c;同时因为是21水果是最新版&#xff0c;所以增加了新的功能&am…...

pandas数据分析35——多个数据框实现笛卡尔积

什么是笛卡尔积。就是遍历所有组合的可能性。 比如第一个盒子有[1,2,3]三个号码球&#xff0c;第二个盒子有[4,5]两个号码球。那么从每个盒子里面分别拿一个球共有3*2两种可能性&#xff0c;其集合就是{[1,4],[2,4],[3,4],[1,5],[2,5],[3,5]},这个就是笛卡尔积。 三个盒子也是…...

【C语言学习笔记】:数组倒序排列,数组倒置

数组倒置就是将数组元素中的数据倒过来&#xff01; 举个例子&#xff0c;比如下面程序&#xff1a; #include <stdio.h>int main(void) { int a[5] {1, 2, 3, 4, 5}; int b[5]; //用来存放倒置后的数据 int i, j; for (i0, j4; i<5, j>0; i, --j)…...

sni+tomcat漏洞复现

sni SNI产生背景 SSL以及TLS&#xff08;SSL的升级版&#xff09;为客户端与服务器端进行安全连接提供了条件。但是&#xff0c;由于当时技术限制&#xff0c;SSL初期的设计顺应经典的公钥基础设施 PKI(Public Key Infrastructure)设计&#xff0c;PKI 认为一个服务器只为一个…...

Linux ALSA 之十:ALSA ASOC Machine Driver

ALSA ASOC Machine Driver一、Machine 简介二、ASoC Machine Driver2.1 Machine Driver 的 Platform Driver & Platform Device 驱动模型2.2 在 Probe() 中注册声卡三、snd_soc_register_card 函数3.1 bind DAIs3.2 New a sound card3.3 Create card new widgets3.4 Probe …...

Spring 面试题(一):Spring 如何处理全局异常?

❤️ 博客首页&#xff1a;水滴技术 &#x1f680; 支持水滴&#xff1a;点赞&#x1f44d; 收藏⭐ 留言&#x1f4ac; &#x1f338; 订阅专栏&#xff1a;Spring 教程&#xff1a;从入门到精通 文章目录1、如何处理全局异常2、代码示例2.1、定义统一的“响应结果对象”2.2、…...

Threadlocal为何引发内存泄漏问题

首先我们要先了解什么是泄漏问题和什么是内存溢出 内存泄漏表示程序员申请了内存&#xff0c;但是该内存一直无法被释放 内存溢出表示申请内存不足&#xff0c;就会报错 为何引发内存泄漏问题 因为每个线程都有自己独立的ThreadLocalMap对象&#xff0c;key为ThreadLocal&…...

大厂裁员潮下,软件人的“抗风险”能力清单

在当今科技行业&#xff0c;大厂裁员潮已成为不可忽视的现实。2025年至2026年间&#xff0c;多家头部企业为优化成本&#xff0c;纷纷缩减规模&#xff0c;导致软件测试从业者面临前所未有的职业挑战。裁员不仅源于经济压力&#xff0c;更反映了行业转型——基础手工测试正被自…...

嵌入式软件开发规范与最佳实践指南

嵌入式软件开发最佳实践指南1. 项目概述1.1 嵌入式开发核心挑战现代嵌入式系统开发面临代码复杂度增加、团队协作需求提升以及产品迭代周期缩短等多重挑战。高效的开发流程和规范的编码实践成为保证项目成功的关键因素。1.2 开发环境配置建议推荐采用以下硬件配置方案&#xff…...

FreeRTOS内存管理实战:如何在Xilinx Zynq上正确配置堆大小避免Malloc失败

FreeRTOS内存管理实战&#xff1a;Xilinx Zynq平台堆配置与优化指南 在嵌入式系统开发中&#xff0c;内存管理往往是决定系统稳定性的关键因素之一。当你在Xilinx Zynq平台上使用FreeRTOS时&#xff0c;突然遇到vApplicationMallocFailedHook()被调用的错误提示&#xff0c;这就…...

OpenClaw备份方案:GLM-4.7-Flash自动化任务配置保存与恢复

OpenClaw备份方案&#xff1a;GLM-4.7-Flash自动化任务配置保存与恢复 1. 为什么需要备份OpenClaw配置 上周我的开发机突然遭遇硬盘故障&#xff0c;导致所有OpenClaw配置丢失。当时正在运行的三个自动化流程全部中断&#xff0c;包括每天凌晨自动执行的日报生成和每周五的代…...

终极Markdown Viewer:5分钟打造你的浏览器技术文档阅读器

终极Markdown Viewer&#xff1a;5分钟打造你的浏览器技术文档阅读器 【免费下载链接】markdown-viewer Markdown Viewer / Browser Extension 项目地址: https://gitcode.com/gh_mirrors/ma/markdown-viewer 你是否厌倦了在浏览器中查看Markdown文件时格式混乱的体验&a…...

MOVA开源:AI同步生成音视频的全新突破

MOVA开源&#xff1a;AI同步生成音视频的全新突破 【免费下载链接】MOVA-360p 项目地址: https://ai.gitcode.com/OpenMOSS/MOVA-360p 导语&#xff1a;MOVA-360p模型正式开源&#xff0c;标志着AI音视频生成领域告别"无声时代"&#xff0c;首次实现视频与音…...

MinIO文件存储避坑指南:SpringBoot整合中的5个常见错误及解决方案

MinIO文件存储避坑指南&#xff1a;SpringBoot整合中的5个常见错误及解决方案 在当今数据驱动的时代&#xff0c;文件存储和管理已成为企业应用开发中不可或缺的一环。MinIO作为一款高性能、开源的对象存储解决方案&#xff0c;因其轻量级、兼容S3协议以及与云原生生态的无缝集…...

从学术研究到工业部署,Python张量框架选型决策树(含模型规模×硬件约束×团队能力×合规要求4维评估矩阵)

第一章&#xff1a;从学术研究到工业部署&#xff0c;Python张量框架选型决策树&#xff08;含模型规模硬件约束团队能力合规要求4维评估矩阵&#xff09;在将深度学习模型从论文实验推向生产环境的过程中&#xff0c;张量框架的选择远不止“谁更流行”的简单判断。它是一次多目…...

消费级GPU福音:OpenClaw+百川2-13B量化版显存占用实测

消费级GPU福音&#xff1a;OpenClaw百川2-13B量化版显存占用实测 1. 为什么关注显存占用&#xff1f; 去年折腾大模型本地部署时&#xff0c;最头疼的就是显存问题。我的RTX3060显卡只有12GB显存&#xff0c;跑Llama2-13B原版模型时&#xff0c;加载阶段就直接爆显存。直到发…...

Java开发者晋升指南:集成Phi-3-vision构建AI面试题库与评估系统

Java开发者晋升指南&#xff1a;集成Phi-3-vision构建AI面试题库与评估系统 1. 技术招聘的痛点与AI解决方案 技术面试官每天面临重复性劳动&#xff1a;根据JD设计题目、评估代码、写反馈。传统方式存在三大痛点&#xff1a; 题库更新慢&#xff1a;技术栈迭代快&#xff0c…...