模板的概念
首先我们需要明白一个术语,叫编译时确定。
例如:std::cin所输入的类型在编译时就已经确定了下来。
模板就是这样的,你所写下的代码经过编译后确定下来,可以减少重复编程的时间。而且由于是编译时确定,其不会拖慢运行时的速度。
模板的使用
使用模板是很简单的,在你想要定义的 函数/结构体/类 的前面加上
template<class T1,class T2 ,class T3 ...>
这样聪明的编译器可以通过你的代码来推断出你的这个 T T T是个什么东西,并且你可以把 T T T当成一个数据类型来使用。
一个最简单的模板例子:
#include<bits/stdc++.h>
using namespace std;
template<class T>
T sum(T a, T b) {
return a + b;
}
int main()
{
string a = "hello", b = "world";
int x = 1, y = 2;
double f1 = 1.2, f2 = 1.5;
cout << sum<int>(x, y) << endl;
cout << sum<double>(f1, f2) << endl;
cout << sum<string>(a, b) << endl;
return 0;
}
上述例子中的sum<int>(x, y)
实际上是可以省略写成sum(x, y)
的,因为编译器会根据x
和y
的类型来推断出
T
T
T是什么,但是建议还是声明
T
T
T具体的类型。
对于结构体/类 ,你就必须要告诉编译器里面的
T
T
T都是什么类型的了。
例如:
#include<bits/stdc++.h>
using namespace std;
template<class T1, class T2>
struct node
{
T1 a;
T2 b;
};
int main()
{
node<int, string> nd = { 2, "yes"};
cout << nd.a << " " << nd.b << endl;
return 0;
}