c++语法-模板
模板
模板是C++中一种强大的特性,允许你编写通用的代码,以便在不同数据类型上重复使用。模板分为函数模板和类模板,它们都是在编译时生成具体代码的蓝图。
函数模板
函数模板是一种定义通用函数的方式,可以在不同数据类型上使用相同的代码逻辑。函数模板使用template关键字定义,允许在函数中使用一个或多个类型参数。
语法
template <typename T>
return_type function_name(T parameter1, T parameter2, ...) {// 函数体
}
template <typename T>:定义了一个模板,其中T是类型参数,可以在函数内部使用。return_type:函数的返回类型。function_name:函数的名称。T parameter1, T parameter2, ...:函数的参数列表,参数的类型是T。
示例
#include <iostream>// 函数模板示例:计算两个数的最大值
template <typename T>
T max(T a, T b) {return (a > b) ? a : b;
}int main() {int x = 5, y = 10;double d1 = 3.5, d2 = 7.8;std::cout << "Max of integers: " << max(x, y) << std::endl;std::cout << "Max of doubles: " << max(d1, d2) << std::endl;return 0;
}
类模板
类模板允许你定义通用的类,其中的数据类型可以作为参数进行指定,以便创建适用于不同数据类型的对象。
语法
template <typename T>
class ClassTemplate {
public:// 类成员和方法
};
template <typename T>:定义了一个类模板,其中T是类型参数,可以在类内部使用。
示例
#include <iostream>// 类模板示例:实现一个通用的栈
template <typename T>
class Stack {
private:T* data;int top;int capacity;public:Stack(int size) : capacity(size), top(-1) {data = new T[capacity];}~Stack() {delete[] data;}void push(T value) {if (top < capacity - 1) {data[++top] = value;}}T pop() {if (top >= 0) {return data[top--];}return T(); // 默认构造一个T类型的对象并返回}bool isEmpty() {return top == -1;}
};int main() {Stack<int> intStack(5);Stack<double> doubleStack(3);intStack.push(10);intStack.push(20);doubleStack.push(3.14);std::cout << "Int Stack: ";while (!intStack.isEmpty()) {std::cout << intStack.pop() << " ";}std::cout << std::endl;std::cout << "Double Stack: ";while (!doubleStack.isEmpty()) {std::cout << doubleStack.pop() << " ";}std::cout << std::endl;return 0;
}
注意
模板声明和实现必须放在同一个文件中
因为c++模板的底层是占位符,编译的时候链接编入,如果放在不同文件,调用会出现找不到定义/实现的情况
相关文章:
c++语法-模板
模板 模板是C中一种强大的特性,允许你编写通用的代码,以便在不同数据类型上重复使用。模板分为函数模板和类模板,它们都是在编译时生成具体代码的蓝图。 函数模板 函数模板是一种定义通用函数的方式,可以在不同数据类型上使用相…...
DMNet复现(一)之数据准备篇:Density map guided object detection in aerial image
一、生成密度图 密度图标签生成 采用以下代码,生成训练集密度图gt: import cv2 import glob import h5py import scipy import pickle import numpy as np from PIL import Image from itertools import islice from tqdm import tqdm from matplotli…...
k8s相关命令-命名空间
k8s相关命令目录 文章目录 前言一、创建命名空间二、删除命名空间三、查看命名空间列表四、查看命名空间列表五、查看特定命名空间下所有资源六、删除特定命名空间下所有资源 前言 记录k8s命名空间的相关操作命令 一、创建命名空间 kubectl create namespace <namespace&g…...
CG Magic分享同一场景里下,VR渲染器和CR渲染器哪个好?
渲染操作时,VR渲染器和CR渲染器的对比成为常见问题了。这个问题很多人都会问。 今天CG Magic小编通过一个真实的项目,就是同一场景下来比较一下VR渲染器和CR渲染器的区别。 以下图为例是用来测试的场景当年的最终图。采用了当年的一个伊丽莎白大街152号的…...
Hive工作原理
Hive 工作原理详解-阿里云开发者社区 Hive的服务端组件 1. Driver组件:该组件包括:Compiler、Optimizer、Executor,它可以将Hive的编译、解析、优化转化为MapReduce任务提交给Hadoop1中的JobTracker或者是Hadoop2中的SourceManager来进行实际的执行相应…...
vue 使用this.$set设置对象属性值时,不更新试图
vue 使用this.$set设置对象属性值时,不更新试图。 后来发现是因为若对象中存在该属性时,只更新值,不添加响应监测。 //vue/src/core/observer/index.js 源码片段/*** Set a property on an object. Adds the new property and* triggers ch…...
uniapp视频播放功能
UniApp提供了多种视频播放组件,包括视频播放器(video)、多媒体组件(media)、WebView(内置Video标签)等。其中,video和media组件是最常用的。 video组件 video组件是基于HTML5 vide…...
Java面向对象七大原则以及设计模式单例模式和工厂模式简单工厂模式
面向对象的七大原则(OOP) 1,开闭原则: 对扩展开发,对修改关闭 2.里氏替换原则: 继承必须确保超类所拥有的子类的性质在子类中仍然成立 3.依赖倒置原则: 面向接口编程,不要面向实现编程&am…...
Linux 遍历目录(cd 命令)
Linux 遍历目录(cd 命令) 文章目录 Linux 遍历目录(cd 命令)一、cd 命令二、绝对文件路径三、相对文件路径 一、cd 命令 在 Linux 文件系统上,可以使用 cd 命令将 shell 会话切换到另一个目录。cd 命令的格式也很简单…...
整合Nginx实现反向代理
针对后端启动多个服务,接口需要统一请求路径时,可以使用nginx进行请求地址反向代理。 1.下载: nginx 2.下载完成后解压,找到配置文件nginx.conf(在解压文件的conf目录中),在http中增加以下示例代码&#x…...
Linux:IP转INT详解
一、IP地址介绍 IP地址(Internet Protocol Address)是指互联网协议地址,是所有连接到网络设备的唯一标识符。IP地址由32位二进制数表示,通常以四段十进制数(每个数值范围为0-255)表示,例如192.1…...
43.MQ—RabbitMQ
目录 一、MQ—RabbitMQ。 (1)同步调用与异步调用。 (1.1)同步调用。 (1.2)异步调用。 (2)MQ之间的区别。 (3)RabbitMQ学习。 (3.1…...
Leetcode154. 寻找旋转排序数组中的最小值(存在重复元素)
力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台 已知一个长度为 n 的数组,预先按照升序排列,经由 1 到 n 次 旋转 后,得到输入数组。例如,原数组 nums [0,1,4,4,5,6,7] 在变化后可能得到:…...
docker查看镜像的latest对应的具体版本
查询容器镜像时,TAG只显示latest,而不是显示具体的版本号 docker images # 显示内容 REPOSITORY TAG IMAGE ID CREATED SIZE nginx latest 605c77e624dd 20 months ago 141MB redis latest 7614ae945…...
RabbitMQ深入 —— 死信队列
前言 前面荔枝梳理了RabbitMQ中的普通队列、交换机以及相关的知识,在这篇文章中荔枝将会梳理RabbitMQ的一个重要的队列 —— 死信队列,主要了解消息流转到死信队列的三种的方式以及相应的实现demo。希望能帮助到有需要的小伙伴~~~ 文章目录 前言 死信队…...
【React + Umi】自定义离开页面拦截弹框事件
在 react umi 中对离开页面的行为进行自定义弹窗拦截控制。以下为可选的方案分析。 wrapper 首先,因为项目框架是 umi,最先想到了 umi 路由的 wrapper 装饰器,但仔细一想又不太对, wrapper 争对于跳转到某个特定页面的前置行为…...
S1FD40A180H-ASEMI快恢复二极管S1FD40A180H
编辑:ll S1FD40A180H-ASEMI快恢复二极管S1FD40A180H 型号:S1FD40A180H 品牌:ASEMI 封装:TO-247 特性:大功率、快恢复二极管 正向电流:40A 反向耐压:1800V 恢复时间:<300n…...
网络编程 day1
1->x.mind网络编程基础 2->简述字节序的概念,并用共用体(联合体)的方式计算本机的字节序 1.字节序是指不同类型的CPU主机,内存存储多字节整数序列的方式 2.小端字节序:低序字节存储在低地址上 3.大端字节序&a…...
《深入PostgreSQL的存储引擎:原理与性能》
🌷🍁 博主猫头虎(🐅🐾)带您 Go to New World✨🍁 🐅🐾猫头虎建议程序员必备技术栈一览表📖: 🛠️ 全栈技术 Full Stack: 📚…...
python开发之个微群聊机器人的开发
简要描述: 退出群聊 请求URL: http://域名地址/quitChatRoom 请求方式: POST 请求头Headers: Content-Type:application/jsonAuthorization:login接口返回 参数: 参数名必选类型说明wI…...
VIIRS/NPP夜光数据:从数据获取到区域分析的实用指南
1. VIIRS/NPP夜光数据入门指南 第一次接触VIIRS/NPP夜光数据时,我也被各种专业术语和数据产品搞得晕头转向。这种由美国国家海洋和大气管理局(NOAA)提供的夜间灯光遥感数据,已经成为城市发展、能源消耗和经济活动研究的重要数据源…...
如何为Lightnovel-crawler添加新源:ChatGPT辅助开发实战
如何为Lightnovel-crawler添加新源:ChatGPT辅助开发实战 【免费下载链接】lightnovel-crawler Generate and download e-books from online sources. 项目地址: https://gitcode.com/gh_mirrors/li/lightnovel-crawler Lightnovel-crawler是一款强大的轻小说…...
如何用FanControl在5分钟内解决Windows风扇噪音问题?
如何用FanControl在5分钟内解决Windows风扇噪音问题? 【免费下载链接】FanControl.Releases This is the release repository for Fan Control, a highly customizable fan controlling software for Windows. 项目地址: https://gitcode.com/GitHub_Trending/fa/…...
AI编程助手上下文压缩引擎:降低Token成本60-99%的智能解决方案
1. 项目概述:一个为AI编程工具设计的上下文压缩引擎如果你每天都在用Cursor、Claude Code或者GitHub Copilot这类AI编程助手,那你肯定对“上下文窗口”和“Token消耗”这两个词不陌生。每次你让AI助手“看看这个文件”、“运行一下git status”或者“检查…...
利用OpenClaw与gws CLI构建AI Agent的Google Workspace自动化技能
1. 项目概述与核心价值最近在折腾AI智能体(AI Agent)的自动化工作流,发现一个痛点:想让Agent帮我处理Gmail邮件、整理Google Drive文件或者安排Calendar日程,往往需要自己写一堆API集成代码,不仅麻烦&#…...
Go语言轻量级代理工具curxy:命令行驱动的HTTP/S请求转发与Mock服务器实践
1. 项目概述:一个轻量级的本地代理工具最近在折腾一些本地开发环境,特别是需要处理跨域请求或者模拟特定网络环境时,总是绕不开代理这个环节。用 Nginx 配置吧,对于简单的转发需求来说有点重;用 Node.js 写个简单的 HT…...
抖音无水印下载神器:3分钟搞定批量下载,小白也能轻松上手
抖音无水印下载神器:3分钟搞定批量下载,小白也能轻松上手 【免费下载链接】douyin-downloader A practical Douyin downloader for both single-item and profile batch downloads, with progress display, retries, SQLite deduplication, and browser …...
3个步骤解决经典游戏无法联网:IPXWrapper终极兼容方案
3个步骤解决经典游戏无法联网:IPXWrapper终极兼容方案 【免费下载链接】ipxwrapper 项目地址: https://gitcode.com/gh_mirrors/ip/ipxwrapper 你是否曾在Windows 10或11系统上试图重温《红色警戒2》、《帝国时代》或《星际争霸》的局域网对战,却…...
Go语言服务网格流量管理:熔断与限流
Go语言服务网格流量管理:熔断与限流 1. 熔断器模式 熔断器防止级联故障,提高系统可用性。 package meshimport ("sync""time" )type CircuitBreaker struct {mu sync.RWMutexstate CircuitStatefailureCount intma…...
基于微信小程序的校园水果配送商城毕设源码
博主介绍:✌ 专注于Java,python,✌关注✌私信我✌具体的问题,我会尽力帮助你。一、研究目的本研究旨在构建一个基于微信小程序的校园水果配送商城系统以解决传统校园水果采购与配送模式中存在的效率低下问题。当前高校后勤管理普遍面临供应链管理复杂、信…...
