为了提高代码的通用性,代码就必须是通用的。必然而然,通用的代码就不能收类型的限制:
int Max_fun(int x, int y)
{
return x > y ? x : y;
}
int main()
{
int a = 10;
int b = 11;
cout << Max_fun(a, b) << endl;
}
例如比较大小的代码,这个函数只能处理整型变量。如果我们需要比较double或者char等等其他类型呢?
函数模板就很好的解决了这个问题:
使用template<class 类型名>来定义函数模板:
template<class T>
T Max_fun(T x, T y)
{
return x > y ? x : y;
}
int main()
{
int a = 10;
int b = 11;
cout << Max_fun(a, b) << endl;
double ad = 10.2;
double bd = 5.3;
cout << Max_fun(ad, bd) << endl;
}
很完美的解决了代码通用的问题。
接下来是类模板,与函数模板相似:可以处理任何类型的数据:
给出一个简单的类模板:通用顺序表:
template<class T>
class Sqlist
{
private:
T* data;
int size;
int capacity;
public:
Sqlist(T* da = nullptr,int si = 0,int ca = 10):data(da),size(si),capacity(ca)
{
data = new T[capacity];
}
~Sqlist()
{
if (data != nullptr)
{
delete[]data;
}
size = capacity = 0;
}
void Push_Sq(T val)
{
if (Full_sq())
{
T* p = new T[2 * capacity];
memcpy(p, data, capacity * sizeof(T));
delete[]data;
data = p;
capacity *= 2;
}
data[size] = val;
++size;
}
bool Full_sq()
{
return size == capacity;
}
void Pop_Sq()
{
if (size != 0)
{
--size;
}
}
void Print()
{
for (int i = 0; i < size; ++i)
{
cout << data[i] << " ";
}
cout << endl;
}
};
int main()
{
Sqlist<int> st;
st.Push_Sq(2);
st.Push_Sq(9);
st.Push_Sq(5);
st.Print();
st.Pop_Sq();
st.Print();
//char
Sqlist<char> sc;
sc.Push_Sq('5');
sc.Push_Sq('y');
sc.Print();
Sqlist<string> stc;
stc.Push_Sq("yyrhj");
stc.Push_Sq("uthuh");
stc.Print();
return 0;
}
我只是完成了些许功能,删除也很简单只是在表尾部进行删除。
可以看到,模板类的功能是很强大了,很大程度上提高了代码的复用率。
感谢阅读!