CArray

CArray是windows下的相当于动态数组的模板类。用起来及其方便,近期由于需要在JNI下的C语言中使用,自己参考CArray类函数,及其自己需要使用到的部分函数用C++实现出来,以供自己使用,在此贴出来。

#ifndef MyCArray_H_
#define MyCArray_H_

#include <stdio.h>
#include <string.h>

template <class TYPE,class ARG_TYPE >
class MyCArray {
public:
	//构造
	MyCArray()
	{
		int num=1;//初始化数组大小为1
		m_pData=new TYPE[num];
		m_count=0;
		m_nSize=num;
	}
	//析构
	virtual ~MyCArray()
	{
		if(m_pData)
			delete [] m_pData;
	}

	//方法
public:
	//在数组末尾添加元素,有必须,扩展数组
	int Add(TYPE &data)
	{
		if(m_count>=m_nSize)
		{
			ReAlloc();//扩展数组
		}
		m_pData[m_count++]=data;
		return m_count;
	}

	//返回在给定索引上的值
	TYPE GetAt( int nIndex ) const
	{
		if (nIndex<m_count && nIndex>=0)
		{
			return m_pData[nIndex];
		}
		else
		{
			printf("error GetAt");
		}
	}

	//从此数组中移去所有元素
	void RemoveAll( )
	{
		//将数组变为空
		int len=1;
		TYPE *p=new TYPE[len];
		delete []m_pData;
		m_pData=p;
		m_nSize=len;
		m_count=0;
	}

	//返回数组大小
	int GetSize( ) const
	{
		return  m_count;
	}

private:

	//动态分配空间
	void ReAlloc()
	{
		int len=m_nSize*2;
		TYPE *p=new TYPE[len];//扩展一个内存
		memcpy(p,m_pData,m_nSize*sizeof(TYPE));
		delete[] m_pData;
		m_pData=p;
		m_nSize=len;

	}

	//属性
private:
	TYPE     *m_pData; //数组的指针
	int       m_nSize;//Array总长度
	int       m_count;//
};

#endif /* MyCArray_H_ */

  

posted @ 2013-08-09 11:08  蓝夜  阅读(519)  评论(0编辑  收藏  举报