C++STL基础部分(二) 之模板
1.引言
a.模板是C++中重要的概念,它提供了一种通用的方法来开发可重用的代码,说白了, 就是为了图省事:),使用模板可以帮助我们创建参数化的C++类型.
b.C++中模板分为两种类型:函数模板和类模板.
c.函数模板的用法同C++预处理器的用法很相似,都可以提供编译代码中的文本替换功能,但前者可以对类型进行一定的保护,实用类模板可以编写通用的,类型安全的类
在C++中仍然要用到函数模板和类模板,本文将初步阐述一些具体的STL模板思维
2.通过模板来初识STL的思想
稍微有点C++基础的读者应该对模板有一定的印象,那么是否C++中的模板与STL模板不一样呢,其实很相似(哭笑),STL并没那么神秘,也没有用到什么新技术,下面举个例子来
说明一下。
Example 2.1编制动态数组的模板类
#include<stdio.h>
template<class T>
class MyArray
{
private:
int m_nTotalSize; //数组总长度
int m_nValidSize; //数组有效长度
T *m_pData; //数据
public:
MyArray(int nSize=3) //这里默认数组长度为3
{
m_pData=new T[nSize];
m_nTotalSize=nSize;
m_nValidSize=0;
}
void Add(T value) //向m_pData添加数据
{
if(m_nValidSize<m_nTotalSize) //如果有效长度小于总长度
{
m_pData[m_nValidSize]=value; //则赋值
m_nValidSize++; //有效长度+1
}
else
{
int i=0;
T *tmpData=new T(m_nTotalSize); //原始数据备份
for(i=0;i<m_nTotalSize;i++)
{
tmpData[i]=m_pData[i];
}
delete []m_pData; //释放原始数据原始空间
m_nTotalSize*=2; //原始数据空间重新分配,空间扩大1倍
m_pData=new T[m_nTotalSize]; //传回备份数据
for(i=0;i<m_nValidSize;i++)
{
m_pData[i]=tmpData[i];
}
delete []tmpData;
m_pData[m_nValidSize]=value;
m_nValidSize++;
}
}
int GetSize() //返回数组有效长度
{
return m_nValidSize;
}
T Get(int pos) //返回某一位置元素
{
return m_pData[pos];
}
virtual ~MyArray()
{
if(m_pData!=NULL)
{
delete []m_pData;
m_pData=NULL;
}
}
};
int main(int argc,char *argv[])
{
MyArray<int>obj;
obj.Add(1);
obj.Add(2);
obj.Add(3);
obj.Add(4);
for(int i=0;i<obj.GetSize();i++)
{
printf("%d\n",obj.Get(i));
}
return 0;
}
输出结果如图所示
本篇持续更新中...
朋友都知道,,