一、模板分为函数模板和类模板两种
1、函数模板
template <class 类型参数1, class类型参数2, ...>
返回值类型 模板名(形参表)
{
函数体
}
//class关键字可以用typename关键字替换
函数模板看上去就像一个函数。如Swap模板函数:
template <typename T>
void Swap(T & x, T & y)
{
T tmp = x;
x = y;
y = tmp;
}
2、类模板
template <typename type>
class class-name
{
};
类模板看上去就像一个类。如Stack类:
#include <vector>
#include <string>
using namespace std;
template <class T>
class Stack
{
private:
vector<T> elems; // 元素
public:
void push(T const&); // 入栈
void pop(); // 出栈
T top() const; // 返回栈顶元素
bool empty() const{ // 如果为空则返回真。
return elems.empty();
}
};
template <class T>
void Stack<T>::push (T const& elem)
{
// 追加传入元素的副本
elems.push_back(elem);
}
template <class T>
void Stack<T>::pop ()
{
if (elems.empty()) {
throw out_of_range("Stack<>::pop(): empty stack");
}
// 删除最后一个元素
elems.pop_back();
}
template <class T>
T Stack<T>::top () const
{
if (elems.empty()) {
throw out_of_range("Stack<>::top(): empty stack");
}
// 返回最后一个元素的副本
return elems.back();
}