CArray

/*************************************************************************
	> File Name: CArray.h
	> Author: ma6174
	> Mail: ma6174@163.com 
	> Created Time: 2018年11月17日 星期六 10时19分23秒
 ************************************************************************/

//#include<iostream>
//using namespace std;

template<typename TYPE,typename ARG_TYPE = const TYPE&>
class CArray
{
	private:
		TYPE *m_type;
		int m_nSize;
		int m_nNew;
	public:
		CArray();
		~CArray();

		void Add(ARG_TYPE type);   //添加
		
		TYPE GetAt(int nType)const;
		int GetSize()const;

		void RemoveAll();          //刪除所有數據
		void RemoveAt(int nType);  //刪除某一個數據

		void ChangePosition(int nType1,int nType2); //交換兩個數據的位置

		void Insert(ARG_TYPE type,int nType);  //插入數據
		//void InsertFront(ARG_TYPE type,int nType);   //往前面插入數據
		//void InsertBehind(ARG_TYPE type,int nType);  //往後面插入數據

		//修改數據
		void Set(ARG_TYPE type,int nType)
		{
			if(m_nSize <= nType)
				return ;
			m_type[nType] = type;
		}
	private:
		void Relloc();  //重新分配內存
};

template<typename TYPE,typename ARG_TYPE>
CArray<TYPE,ARG_TYPE>::CArray():m_nSize(0),m_nNew(10)
{
	m_type = new TYPE[m_nNew];
}

template<typename TYPE,typename ARG_TYPE>
CArray<TYPE,ARG_TYPE>::~CArray()
{
	RemoveAll();
}

template<typename TYPE,typename ARG_TYPE>
void CArray<TYPE,ARG_TYPE>::Add(ARG_TYPE type)
{
	if(m_nSize >= m_nNew)
		Relloc();
	m_type[m_nSize] = type;
	m_nSize++;
}

template<typename TYPE,typename ARG_TYPE>
TYPE CArray<TYPE,ARG_TYPE>::GetAt(int nType)const
{
	return m_type[nType];
}

template<typename TYPE,typename ARG_TYPE>
int CArray<TYPE,ARG_TYPE>::GetSize()const
{
	return m_nSize;
}

template<typename TYPE,typename ARG_TYPE>
void CArray<TYPE,ARG_TYPE>::RemoveAll()
{
	delete []m_type;
	m_nSize = 0;
}

template<typename TYPE,typename ARG_TYPE>
void CArray<TYPE,ARG_TYPE>::RemoveAt(int nType)
{
	if(m_nSize <= nType)
		return ;

	while(m_nSize > nType)
	{
		m_type[nType] = m_type[nType+1];
		nType++;
	}
	m_type[m_nSize-1] = 0;
	m_nSize--;
}

template<typename TYPE,typename ARG_TYPE>
void CArray<TYPE,ARG_TYPE>::ChangePosition(int nType1,int nType2)
{
	if(m_nSize <= nType1 || m_nSize <= nType2)
		return ;
	TYPE temp = m_type[nType1];
	m_type[nType1] = m_type[nType2];
	m_type[nType2] = temp;
}

template<typename TYPE,typename ARG_TYPE>
void CArray<TYPE,ARG_TYPE>::Insert(ARG_TYPE type,int nType)
{
	if(m_nSize >= m_nNew)
		Relloc();
	if(nType > m_nSize)
		return ;
	int i = m_nSize;
	while(nType != i)
	{
		m_type[i] = m_type[i-1];
		i--;
	}
	m_type[nType] = type;
	m_nSize++;
}

/*
template<typename TYPE,typename ARG_TYPE>
void CArray<TYPE,ARG_TYPE>::InsertFront(ARG_TYPE type,int nType)
{
	if(0 == nType)
		return ;
	nType = nType-1;
	int i = m_nSize;
	if(m_nSize > m_nNew)
		Relloc();
	while(nType != i)
	{
		m_type[i] = m_type[i-1];
		i--;
	}
	m_type[nType] = type; 
	m_nSize++;
}

template<typename TYPE,typename ARG_TYPE>
void CArray<TYPE,ARG_TYPE>::InsertBehind(ARG_TYPE type,int nType)
{
	if(m_nSize > m_nNew)
		Relloc();
	nType = nType + 1;
	int i = m_nSize;
	while(nType != i)
	{
		m_type[i] = m_type[i-1];
		i--;
	}
	m_type[nType] = type;
	m_nSize++;
}
*/

template<typename TYPE,typename ARG_TYPE>
void CArray<TYPE,ARG_TYPE>::Relloc()
{
	m_nNew = m_nNew*2;
	TYPE *t = new TYPE[m_nNew];
	while(-1 < m_nSize)
	{
		t[m_nSize] = m_type[m_nSize];
		m_nSize--;
	}
	RemoveAll();
	m_type = t;
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值