C++之初阶模板

马肤
这是懒羊羊

个人主页:救赎小恶魔

欢迎大家来到小恶魔频道

好久不见,甚是想念

今天我们要深入讲述C++内存管理

目录

引言:

模板

  1. 泛型编程

2. 模板函数

2.1函数模板的原理 

2.2模板函数的实例化

2.3函数模板的匹配 

3.类模板

STL

STL 的主要组成部分

STL 的优点

使用 STL 的注意事项


引言:

从这一章开始,我们将正式认识C++的一些模板,这也就是C++比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;
}
 
......

使用函数重载虽然可以实现,但是有一下几个不好的地方:

  1. 重载的函数仅仅只是类型不同,代码的复用率比较低,只要有新类型出现时,就需要增加对应的函数
  2. 代码的可维护性比较低,一个出错可能所有的重载均出错

那能否告诉编译器一个模子,让编译器根据不同的类型利用该模子来生成代码呢?

答案是可以的

这里就需要引进一个泛型编程了

C++的泛型编程是一种编程范式,它允许程序员编写与类型无关的代码,这些代码可以在多种数据类型上工作,而无需为每个数据类型都编写单独的函数或类。这种特性主要通过模板(templates)来实现。

模板是泛型编程的核心。模板可以是函数模板(function templates)或类模板(class templates)。

2. 模板函数

模板函数的定义:

模板函数使用template关键字来声明类型参数。类型参数通常被包含在尖括号中,并且用某种标识符(如T、typename Type等)来表示。

其基本结构是:

template 
T functionName(T parameter) {
    // 函数实现
}

 下面是一个简单的模板函数的例子,该函数返回两个值的较大者:

template   
T max(T a, T b) {  
    return (a > b) ? a : b;  
}

又或者我们写一下上边的交换函数

template 
void swap(T& a, T& b)
{
	T ret = a;
	a = b;
	b = ret;
}

在这里,typename T 定义了一个类型参数,它在函数模板被实例化时将被具体的类型替换。例如,如果你用 int 类型实例化该模板,编译器将生成一个接受 int 参数并返回 int 类型值的函数,T代表类型

当我们拥有了模板之后,我们就不用再去写其他类型的交换函数了

template 
void Swap(T& a, T& b)
{
	T ret = a;
	a = b;
	b = ret;
}
int main()
{
	int a, b;
	double c, d;
	a = 1, b = 2;
	c = 3.5, d = 4.5;
	cout 

文章版权声明:除非注明,否则均为VPS857原创文章,转载或复制请以超链接形式并注明出处。

发表评论

快捷回复:表情:
评论列表 (暂无评论,0人围观)

还没有评论,来说两句吧...

目录[+]

取消
微信二维码
微信二维码
支付宝二维码