定义:
模板是泛型编程的基础,泛型编程即以一种独立于任何特定类型的方式编写代码。 模板是创建泛型类或函数的蓝图或公式。库容器,比如迭代器和算法,都是泛型编程的例子,它们都使用了模板的概念。 每个容器都有一个单一的定义,比如 向量,我们可以定义许多不同类型的向量,比如 vector <int> 或 vector <string>。
————From 菜鸟编程
语法:
template<class T> ...
这里语法看不懂没有关系
后面会有解释
在函数上套上模板
可以满足处理不同数据类型的需要
比如 STL 中自带的 swap 函数
只能进行 int类型数据 的转化
要满足所有类型的转化 就要依靠模板
Code:
template<class T> T Swap(T &a,T &b){ T temp = a; a = b; b = temp; }
这里就假定了一个类 T
当输入的是 int 类型数据的时候
T 所表示的含义就是 int
就把所有的 T 视为 int 即可
输入的是其他类型的也一样
#include<bits/stdc++.h> using namespace std; template<class T> T Swap(T &a,T &b){ T temp = a; a = b; b = temp; } int main(){ int x1 = 1,y1 = 2; double x2 = 1.5,y2 = 2.4; Swap(x1,y1); cout << x1 << " " << y1 << endl; Swap(x2,y2); cout << x2 << " " << y2 << endl; return 0; }
2 1 2.4 1.5 -------------------------------- Process exited after 0.05167 seconds with return value 0 请按任意键继续. . .
原理作用和函数模板相似
直接来看代码
(ps: 个人比较喜欢指针的写法 但会把非指针的代码放在折叠中)
Code:
#include<bits/stdc++.h> using namespace std; template<class T> class class1{ public: T a,b; T Max(){ if(a > b) return a; else return b; } }; int main(){ class1<int>x,*px = &x; cin >> px->a >> px->b; cout << px->Max() << endl; class1<double>y,*py = &y; cin >> py->a >> py->b; cout << py->Max() << endl; return 0; }
#include<bits/stdc++.h> using namespace std; template<class T> class class1{ public: T a,b; T Max(){ if(a > b) return a; else return b; } }; int main(){ class1<int>x; cin >> x.a >> x.b; cout << x.Max() << endl; class1<double>y; cin >> y.a >> y.b; cout << y.Max() << endl; return 0; }
Print:
10 20 20 10.6 10.5 10.6 -------------------------------- Process exited after 10.52 seconds with return value 0 请按任意键继续. . .