概念
模板是提供一种通用的方法来开发可重用的代码,即可以创建参数化的c++模型,可分为函数模板和类模板
函数模板提供编译过程中的文本替换功能,使用类模板可以编写通用的、安全的类。
编制动态数组模板类
#include"stdafx.h"
#include<iostream>
using namespace std;
template<class T>
class MyArray {
private:
int m_TotalSize;
int m_ValidSize;
T* m_pData;
public:
void Create(int nSize)//创建数组
{
m_pData = new T[nSize];
m_TotalSize = nSize;
m_ValidSize = 0;
}
void Add(T value)//添加数据
{
if (m_ValidSize<m_TotalSize)
{
m_pData[m_ValidSize] = value;
m_ValidSize++;
}
else {
int i = 0;
//T* tmpData = m_pData;明显的错误 如果这样做的话 delete了m_pData tmpData的内容也会被清除
T* tmpData = new T[m_ValidSize];
for (i = 0; i<m_ValidSize; i++)
{
tmpData[i] = m_pData[i];
}
delete[]m_pData;
m_TotalSize *= 2;
m_pData = new T[m_TotalSize];
for (i = 0; i<m_ValidSize; i++)
{
m_pData[i] = tmpData[i];
}
delete []tmpData;
m_pData[m_ValidSize] = value;
m_ValidSize++;
}
}
int GetSize()//获得数组有效长度
{
return m_ValidSize;
}
T GetValue(int n)//返回某一位置元素
{
return m_pData[n];
}
virtual ~MyArray()
{
delete[]m_pData;
m_pData = NULL;
}
};
int main()
{
MyArray<int> obj;//表明数组中存放的类型是int型 若为char 则表明数组中存放的类型为char型
obj.Create(3);
obj.Add(1);
obj.Add(2);
obj.Add(3);
obj.Add(4);
for (int i = 0; i<obj.GetSize(); i++)
{
cout << obj.GetValue(i) << endl;
}
system("pause");
return 0;
}
编制数组求和的模板函数
#include<iostream>
using namespace std;
template<class T>
T sum(T data[],int nSize)
{
T sum = 0;
for(int i=0;i<nSize;i++)
{
sum+=data[i];
}
return sum;
}
void main()
{
int a[5]={1,2,3,4,5};
cout<<sum(a,5)<<endl;
}
参见刘德山老师的 c++STL基础及应用