1. 概念及定义
模板可以用来创建泛型类或函数的一个公式,c++程序设计中采用类型作为参数的程序设计,也可以称为通用程序设计。
我们可以在c++中使用模板来定义函数和类。
目的:C++的发明者Bjarne Stroustrup告诉我“这是为了支持类型安全、类容器的有效性和算法的通用性”。
优势和劣势:为了得到通用编程的优点。
国际标准化组织(ISO)为C++建立了C++标准库,该标准库功能强大,这证明了模板的重要性。库中涉及算法和容器的部分组成了标准模板库(简称STL)。由于模板的可重用性和可扩展性,你可以利用STL来实现效率很高的代码。
2. 用法
- 函数模板
template <class 形参名,class 形参名,......> 返回类型 函数名(参数列表)
// class T, 虚类型T可以替代int \ double等基本数据类型
{
// 函数体
}
template – 关键字,声明一个模板;
class – 关键字,也可以用typename替代;
<> – 称为模板形参,模板形参和函数形参基本一样,模板形参不能为空
- 类模板
template<class 形参名,class 形参名,…> class 类名
{
...
};
template<class T> class A
{
public:
T a;
T b;
};
类模板形参不能为空;
3. 用法
- 用模板实现加法函数
template<typename T> T ADD(T x, T y)
{
return (x + y);
}
int main()
{
cout << ADD(1, 3) << endl;
cout << ADD(1.3, 2.5) << endl;
system("pause");
return 0;
}
- 类模板实现元素出入栈
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();
}
- vector类模板
可以参考c++容器.
参考资料
- 1 c++模板
- 2 使用c++模板的优点和缺点
- 3 C++:模板总结
- 4 c++模板