个人主页:救赎小恶魔
欢迎大家来到小恶魔频道
好久不见,甚是想念
今天我们要深入讲述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; } ......
使用函数重载虽然可以实现,但是有一下几个不好的地方:
- 重载的函数仅仅只是类型不同,代码的复用率比较低,只要有新类型出现时,就需要增加对应的函数
- 代码的可维护性比较低,一个出错可能所有的重载均出错
那能否告诉编译器一个模子,让编译器根据不同的类型利用该模子来生成代码呢?
答案是可以的
这里就需要引进一个泛型编程了
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
还没有评论,来说两句吧...