各位好友, 欢迎来到本期博客 !下面, 正式进入 ---->模板环节 ---->STL(最后一块拼图)
下面, 程序是按照 C 语言上的用法习惯, 使用的一种交换数据类型的算法 !非常冗余 ! 如下所示 :>
------>测试环节 :>
------>调试环节 :>
可见,上述写法, 重复了许多 相同代码,而下面, 模板的引入, 是真的非常香 !如下所示 :>
----->模板 ~~ 开启 :>
#include <iostream>
using std::cout;
using std::endl;
template<typename T>
void Swap(T& left, T& right)
{
T tmp = left;
left = right;
right = tmp;
}
int main()
{
int a = 10, b = 12;
Swap(a, b);
double m = 21.5, n = 23,5;
Swap(m, n);
char ch1 = 'a', ch2 = 'g';
Swap(ch1, ch2);
}
----->更好观感的彩色代码 :>
------>调试环节 :>
各位好友, 在这里 还要提及一下, 泛型编程 !何为 泛型编程?
---->编写 与类型无关的通用代码, 是代码复用的一种手段。 模板是泛型编程的基础。
而模板 分为两大块 :>函数模板, 类模板
有关上述代码, 用模板实现,还需要注意 :>typename 是用来定义模板参数关键字, 也可以使用 class
但是不可以使用 struct 进行定义 !
另外, 还需明确一点:>函数模板是一个蓝图, 它本身并不是函数, 是编译器生产特定具体类型函数的模具。
----->函数模板实例化:>
---->用不同类型的参数使用函数模板, 称为函数模板的实例化。
模板实例化分为两大部分 :>隐式实例化 与显示实例化。
(1)隐式实例化 :>让编译器根据实参 --->推演模板参数的实际类型。
----->实现环节 :>
#include <iostream>
using std::cout;
using std::endl;
template <typename T>
T Add(T& left, T&right)
{
return left + right;
}
int main()
{
int a = 10, b = 12;
Add(a, b);
double m = 23.5, n = 27.5;
Add(m, n);
}
----->更好观感的彩色代码 :>
------>调试环节:>
---'>着 反汇编 :>
(2)显示实例化 :>在函数名之后 <>里面 指定模板参数的实际类型。
在(1)中 运用模板, 实现环节, 会发现传入的实参类型是相同的 !那若不同呢, 会有什么情况:>
----->错误示范 :>
----->正确样例 :>
----->解析 :>
各位好友,请注意,上述红色框框, 这是使用显示实例化, 非常关键的一点 !
在前几期, 曾提及过 权限 , 这在 “引用” 一档期 !着重梳理的 !而在这里, 同样涉及到权限 !
---->如下所示 :>
----->类_模板_
---->未 运用模板 ——>实现栈区 :>
------->测试运行结果 :>
各位好友, 以上是 没有运用模板, 栈区实现 !但是, 这只能实现 一种类型的算法 !
若 想继续实现 “字符型栈区”,“浮点型栈区”···· 必须再次书写上述同样的代码, 之后更换一下类型而已