泛型编程
泛型编程就是编写与类型无关的通用代码,是代码复用的一种手段,模板是泛型编程的基础。这里举一个现实生活中的例子,我们想做很多个草莓形状的橡皮泥玩具,并且这些草莓玩具颜色不同。
问题来了,我们该怎么解决这个问题呢?难道拿出不同颜色的橡皮泥开始一个一个捏吗?但是这样的话效率是不是很低呢?所以我们会这样想,既然这些草莓玩具的形状相同,只是颜色不同,我们是不是可以做一个草莓模具,当我们想做一个草莓玩具的时候,就可以将对应颜色的橡皮泥填充模具,最终得到这个草莓。

这样我们有了模具以后,只需要使用对应颜色的橡皮泥就可以批量制作草莓了,非常高效,这就属于泛型编程的思维。我们再举一个有关编程的例子,也就是使用 C 语言实现两个变量的交换。
void Swap(int& x, int& y) {
int tmp = x;
x = y;
y = tmp;
}
void Swap(double& x, double& y) {
double tmp = x;
x = y;
y = tmp;
}
void Swap(char& x, char& y) {
char tmp = x;
x = y;
y = tmp;
}
// 其它类型就不再一一列举了
我们可以发现,如果是 C 语言来写这种交换函数,每一种类型我们都要把这个函数套一遍,但是其实这些函数除了类型不同基本上没有区别,如果每种类型都写一次实在太麻烦了,所以在 C++ 中引入了模板的概念,就类似于做草莓玩具的模具,通过模具可以制作非常多的草莓玩具,通过模板可以快速生成多个函数,接下来我们正式开始学习模板。
函数模板
函数模板的概念和格式
函数模板代表了一个函数家族,也就是该函数模板与类型无关,当我们使用一个类型的函数,编译器会根据这个类型产生函数的特定类型版本,可能有点不好懂,看到后面大家就明白了,我们先来看看函数模板的语法格式:
// 这里的 typename 可以替换为 class,用于声明类型 T1 到 Tn 都是类型
< T1, T2, ..., Tn>



