什么是模板
C++模板是C++语言中的一种特殊语法,可以让我们写出通用的代码,以便在不同的数据类型上进行操作。C++中有两种类型的模板:函数模板和类模板。函数模板是用来定义函数的模板,类模板是用来定义类的模板。
函数模板
函数模板可以定义一个通用的函数,而不用为每种不同的数据类型重复地写出一个函数。例如,以下是一个使用函数模板实现交换变量值的例子:
template <typename T>
void swap(T& a, T& b)
{
T temp = a;
a = b;
b = temp;
}
int main()
{
int a = 1, b = 2;
swap(a, b);
double c = 1.0, d = 2.0;
swap(c, d);
return 0;
}
上述代码中,我们定义了一个通用的swap函数。在main函数中,我们可以用它来交换int型和double型变量的值,这样我们就不需要重复写出两个交换函数。
类模板
类模板同样可以定义一个通用的类,可以让我们在不同的数据类型上进行操作。例如,以下是一个使用类模板实现栈的例子:
template <typename T>
class Stack
{
private:
T m_array[100];
int m_top;
public:
Stack()
{
m_top = 0;
}
void push(T value)
{
m_array[m_top++] = value;
}
T pop()
{
return m_array[--m_top];
}
};
int main()
{
Stack<int> intStack;
intStack.push(1);
intStack.push(2);
intStack.push(3);
std::cout << intStack.pop() << std::endl; // 输出:3
Stack<double> doubleStack;
doubleStack.push(1.0);
doubleStack.push(2.0);
doubleStack.push(3.0);
std::cout << doubleStack.pop() << std::endl; // 输出:3.0
return 0;
}
上述代码中,我们定义了一个Stack类模板,可以用它来定义不同类型的栈。在main函数中,我们分别定义了int类型和double类型的栈,并分别进行了入栈和出栈的操作。如果没有模板,那么你就需要复制粘贴另外一套代码,然后分别设置成int和double。但我们要明白,int栈和double栈并不是共用一套代码,底层其实还是写了两套代码,只不过由编译器帮我们完成。