模板初阶(1):函数模板,类模板

news/2024/10/23 8:23:50/

一、函数模板

1.1 概念

函数模板代表了一个函数家族,该函数模板与类型无关,在使用时被参数化,根据实参类型产生函数的特定类型版本。

格式: template <typename T>template <class T>

template <class T>
void Swap(T& a, T& b)
{T tmp = a;a = b;b = tmp;
}int main()
{int a = 1, b = 2;double d1 = 1.2, d2 = 2.1;Swap(a, b);Swap(d1, d2);return 0;
}
1.2 函数模板的原理

在编译阶段,编译器需要根据传入实参的类型推演生成对应类型的函数

1.3 函数模板的实例化

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

1. 隐式实例化:编译器根据传入实参的类型推演生成对应类型的函数

如上:Swap()

template <class T>
T Add(const T x, const T y)
{return x + y;
}int main()
{int a1 = 1;double d1 = 2.0;// error// Add(a1, d1); // 1. Add(a1, (int)d1); 2. 显式实例化return 0;
}
2. 显式实例化:在函数名后的<>中指定函数模板的参数类型
template <class T>
T Add(const T x, const T y)
{return x + y;
}int main()
{int a1 = 1;double d1 = 2.0;Add <double>(a1, d1);// 显式实例化return 0;
}

二、类模板

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

E.g.

template <class T1>
// typedef int STDateType    class Stack// Stack不是具体的类,是编译器根据被实例化的类型生成的具体类的模具
{
public:Stack(int capacity = 3):_top(0), _capacity(capacity){cout << "Stack(int capacity = 3)" << endl;// _a = new STDateType[capacity];_a = new T1[capacity];}~Stack(){cout << "~Stack()" << endl;delete _a;_top = _capacity = 0;}
private:// STDateType* _a;T1* _a;int _top;int _capacity;
};

http://www.ppmy.cn/news/1239342.html

相关文章

Java项目如何打包成Jar(最简单)

最简单的办法&#xff0c;使用Maven插件&#xff08;idea自带&#xff09; 1.选择需要打包的mudule&#xff0c;点击idea右侧的maven插件 2.clean操作 3.选择需要的其他mudule&#xff0c;进行install操作&#xff08;如果有&#xff09; 4.再次选择需要打包的module&#…

第96步 深度学习图像目标检测:FCOS建模

基于WIN10的64位系统演示 一、写在前面 本期开始&#xff0c;我们继续学习深度学习图像目标检测系列&#xff0c;FCOS&#xff08;Fully Convolutional One-Stage Object Detection&#xff09;模型。 二、FCOS简介 FCOS&#xff08;Fully Convolutional One-Stage Object D…

【数据结构 —— 堆的实现(顺序表)】

数据结构 —— 堆的实现&#xff08;顺序表&#xff09; 一.堆1.1堆的定义及结构1.1.1.堆的定义1.1.2.堆的性质1.1.3.堆的结构 二.堆的实现2.1.头文件的实现 —— &#xff08;Heap.h&#xff09;2.2.源文件的实现 —— &#xff08;Heap.c&#xff09;2.2.1.小堆的源文件2.2.2…

【LM、LLM】浅尝二叉树在前馈神经网络上的应用

前言 随着大模型的发展&#xff0c;模型参数量暴涨&#xff0c;以Transformer的为组成成分的隐藏神经元数量增长的越来越多。因此&#xff0c;降低前馈层的推理成本逐渐进入视野。前段时间看到本文介绍的相关工作还是MNIST数据集上的实验&#xff0c;现在这个工作推进到BERT上…

ECharts与Excel的结合实战

引言&#xff1a;本文是一篇ECharts和Excel实战的记录。将Excel与ECharts产生火花&#xff0c;从Excel读取数据然后在ECharts上展示。 1.柱状图前端代码 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title…

C#串口通信从入门到精通(27)——高速通信下解决数据处理慢的问题(20ms以内)

前言 我们在开发串口通信程序时,有时候会遇到比如单片机或者传感器发送的数据速度特别快,比如10ms、20ms发送一次,并且每次发送的数据量还比较大,如果按照常规的写法,我们会发现接收的数据还没处理完,新的数据又发送过来了,这就会导致处理数据滞后,软件始终处理的不是…

科普:多领域分布式协同仿真

分布式协同仿真是一种在分布式计算环境中进行协同工作的仿真方法。使用该方法进行协同仿真时&#xff0c;仿真任务将被分发到多个计算节点上&#xff0c;并且这些节点可以同时工作以模拟完整的系统行为。分布式协同仿真已被广泛应用于工程、科学和军事领域&#xff0c;以便更好…

16.Python 多进程和多线程

进程是应用程序正在执行的实体&#xff0c;当程序执行时&#xff0c;也就创建了一个主线程。进程在创建和执行需要占用一定的资源&#xff0c;如内存、文件、I/O设备等。 线程是CPU使用的基本单元&#xff0c;由主线程创建&#xff0c;并使用这个进程的资源&#xff0c;因此线…