自定义一个动态数组

/******************************动态数组****************************************/
#include <memory>
#include <new>
typedef unsigned char       BYTE;
template<class Type>
class carray
{
public:
	carray():m_nSize(0),pdata(NULL){} 
	~carray();
	void add(Type newElement);
	int getsize();
	Type operator[](int nIndex) const;
	Type& operator[](int nIndex);
private:
	int m_nSize;
	Type* pdata;
};

template<class Type>
carray<Type>::~carray()
{
	if (pdata != NULL)
	{
// 		for (;m_nSize--;pdata++)
// 			pdata->~Type();
		delete[] (BYTE*)pdata;
	}
}

/********************************************************************************/
/*                      以下添加元素这个部分很重要                              */
/********************************************************************************/
template<class Type>
void carray<Type>::add(Type newElement)
{
	if (pdata == NULL)
	{
		pdata = (Type*) new BYTE[sizeof(Type)];
		memset((void*)pdata,0,sizeof(Type));
		::new((void*)pdata) Type;
	}
	else
	{
		Type* pNewData = (Type*) new BYTE[(m_nSize+1) * sizeof(Type)];
		memcpy(pNewData,pdata,m_nSize*sizeof(Type));
		memset((void*)&pNewData[m_nSize],0,sizeof(Type));
		::new((void*)&pNewData[m_nSize]) Type;
		delete[] (BYTE*)pdata;
		pdata = pNewData;
	}

	pdata[m_nSize++] = newElement;
}

template<class Type>
int carray<Type>::getsize()
{
	return m_nSize;
}

template<class Type>
Type carray<Type>::operator [](int nIndex) const
{
	return pdata[nIndex];
}

template<class Type>
Type& carray<Type>::operator [](int nIndex)
{
	return pdata[nIndex];
}
/*************************************************************************************/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值