Template
一.函数模板:
个人理解就是把整体代码结构逻辑相同,只有参数类型不同的函数用同一个函数去编写,在这个函数当中不去指定参数的类型,而是使用暂时替代的办法,当需要使用该函数时再定义函数中参数的类型
例如
模板如下
template<typename T> void swap(T& t1, T& t2) {
T tmpT;
tmpT = t1;
t1 = t2;
t2 = tmpT;
}
其中T就是我们所用来暂时替代类型的一个自定义名称,当我们需要使用它时,我们再去指定T是什么,例如:
- T为int
int a = 1, b = 2;
swap<int>(a, b);
- T为double
double a = 1, b = 2;
swap<double>(a, b);
二. 类模板
类模板的简单用法其实和函数模板也很类似,就是在类中都可以去指定T代替某个参数的类型,提高代码的复用率
例如:
template <class T> class A {
public:
A();
~A();
void push(T t);
T pop();
private:
T *value;
int size;
int sign;
};
template <class T> A<T>::A(){
size = 100;
sign = 0;
value = new T[size];
}
template <class T> A<T>::~A() {
delete [] value ;
}
template <class T> void A<T>::push(T t){
if (sign < size)
{
sign ++;
}
value[sign - 1] = t;
}
template <class T> T A<T>::pop(){
T t = value[sign - 1];
sign--;
return t;
}
使用时:
// int类型
A<int> a;
a.push(1);
a.push(2);
a.push(3);
//double类型
A(double) a;
a.push(1.0);
a.push(2.0);
a.push(3.0);