[C++]模板template
模板的使用
定义:
模板是泛型编程的基础,泛型编程即以一种独立于任何特定类型的方式编写代码。
模板是创建泛型类或函数的蓝图或公式。库容器,比如迭代器和算法,都是泛型编程的例子,它们都使用了模板的概念。
每个容器都有一个单一的定义,比如 向量,我们可以定义许多不同类型的向量,比如 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 即可
输入的是其他类型的也一样
效果演示
Code
#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;
}
Show
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
请按任意键继续. . .