// MyStl.cpp : Defines the entry point for the console application. // #include "stdafx.h" #include <iostream> using namespace std; 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; } //向m_pData添加数据 void Add(T value){ if(m_nValidSize<m_nTotalSize){//若有效长度小于总长度 m_pData[m_nValidSize++]=value; } else{//若有效长度大于等于总长度 T *tmpData= new T[m_nTotalSize];//原始数据备份 for(int i=0;i<m_nTotalSize;i++){ tmpData[i]=m_pData[i]; } delete []m_pData;//释放原始数据内存空间 m_nTotalSize*=2;//原始数据空间重新分配,扩大2倍 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++){ cout<<obj.Get(i)<<endl; } return 0; }