现在的位置: 首页 > 综合 > 正文

编制动态数组的模板类

2013年12月03日 ⁄ 综合 ⁄ 共 1031字 ⁄ 字号 评论关闭
// 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;
}

抱歉!评论已关闭.