模板基础 + STL
模板
一、泛型编程
我们如果想用C++写Swap函数,既要交换整形也要交换浮点型,那么我们得用上函数重载:
void Swap(int& x, int& y)
{
int temp = x;
x = y;
y = temp;
}
void Swap(double& x, double& y)
{
double temp = x;
x = y;
y = temp;
}
可以发现两个相类似的函数我们要写多遍,很麻烦。如果使用模板就可以减小很多工作量,而模板又分为函数模板和类模板
二、函数模板
//函数模板
template <class T>//template <typename T>
void Swap(T& x, T& y)
{
T temp = x;
x = y;
y = temp;
}
T是参数类型,可以变换。
但是整形和浮点型调用的不是一个函数,当int型调用函数时会把T变成int,当char型调用函数时会把T变成char。
他们都会实例化出对应的函数,叫做模板实例化
那如果我们要一个int型和double相加呢?
template <class T>
T Add(T& a, T& b)
{
T sum = a + b;
return sum;