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_ */