在项目过程中,有时候需要一些能索引的,可以动态插入的,无长度限制的数据结构.
使用STL是可以很方便,但是在mobile上,不想引入STL. 就自己简单地实现了一个这样的结构.
采用模版类的方式来设计.用起来基本还可以.
模版的实现
使用STL是可以很方便,但是在mobile上,不想引入STL. 就自己简单地实现了一个这样的结构.
采用模版类的方式来设计.用起来基本还可以.
模版的实现
如果要往这个结构中添加内容,所添加的结构必须实现拷贝构造函数. 以满足 additem函数的需求,可能我这里设计的不是很好,希望有大侠能指点下.
放个节点对象的实现.
最后的一些思考,在模版的设计里面,对于内存的申请,我是要多少,申请多少,应该可以考虑每次申请一批,慢慢用.
不过在结构不太大的情况下,应该没什么问题的.
使用STL是可以很方便,但是在mobile上,不想引入STL. 就自己简单地实现了一个这样的结构.
采用模版类的方式来设计.用起来基本还可以.
模版的实现
template<class T>
class CDynArray
{
public:
CDynArray()
{
mPT = NULL;
nCount = 0;
&nb%2
在项目过程中,有时候需要一些能索引的,可以动态插入的,无长度限制的数据结构.class CDynArray
{
public:
CDynArray()
{
mPT = NULL;
nCount = 0;
&nb%2
使用STL是可以很方便,但是在mobile上,不想引入STL. 就自己简单地实现了一个这样的结构.
采用模版类的方式来设计.用起来基本还可以.
模版的实现
template<class T>
class CDynArray
{
public:
CDynArray()
{
mPT = NULL;
nCount = 0;
}
~CDynArray()
{
for(int i=0;i<nCount;i++)
delete mPT[i];
free(this->mPT);
}
int AddItem(T mT)
{
int i = nCount++;
this->mPT = (T**)realloc(mPT,sizeof(T*)*nCount);
this->mPT[i] = new T(mT);
return i;
}
int GetCount()
{
return nCount;
}
T& operator [] (int nIndex)
{
return *mPT[nIndex];
}
void Release()
{
for(int i=0;i<nCount;i++)
delete mPT[i];
free(this->mPT);
mPT = NULL;
nCount = 0;
}
protected:
int nCount;
private:
public:
T** mPT;
};
class CDynArray
{
public:
CDynArray()
{
mPT = NULL;
nCount = 0;
}
~CDynArray()
{
for(int i=0;i<nCount;i++)
delete mPT[i];
free(this->mPT);
}
int AddItem(T mT)
{
int i = nCount++;
this->mPT = (T**)realloc(mPT,sizeof(T*)*nCount);
this->mPT[i] = new T(mT);
return i;
}
int GetCount()
{
return nCount;
}
T& operator [] (int nIndex)
{
return *mPT[nIndex];
}
void Release()
{
for(int i=0;i<nCount;i++)
delete mPT[i];
free(this->mPT);
mPT = NULL;
nCount = 0;
}
protected:
int nCount;
private:
public:
T** mPT;
};
如果要往这个结构中添加内容,所添加的结构必须实现拷贝构造函数. 以满足 additem函数的需求,可能我这里设计的不是很好,希望有大侠能指点下.
放个节点对象的实现.
class CLinkMan
{
public:
int nIndex; //索引
int nParIndex; //父索引
int nType; //类型 1为部门,2为人
int nDeptIndex; //所属部门索引
TCHAR tcValue[128]; //值
TCHAR tcValueIndex[128]; //值的索引
CLinkMan()
{
nIndex = -1;
nParIndex = -1;
nType = -1;
nDeptIndex = -1;
tcValue[0] = NULL;
tcValueIndex[0] = NULL;
}
CLinkMan(const CLinkMan& temp)
{
this->nIndex = temp.nIndex;
this->nParIndex = temp.nParIndex;
this->nType = temp.nType;
this->nDeptIndex = temp.nDeptIndex;
wsprintf(this->tcValue,_T("%s"),temp.tcValue);
wsprintf(this->tcValueIndex,_T("%s"),temp.tcValueIndex);
}
CLinkMan& operator = (CLinkMan& temp)
{
this->nIndex = temp.nIndex;
this->nParIndex = temp.nParIndex;
this->nType = temp.nType;
this->nDeptIndex = temp.nDeptIndex;
wsprintf(this->tcValue,_T("%s"),temp.tcValue);
wsprintf(this->tcValueIndex,_T("%s"),temp.tcValueIndex);
return *this;
}
void Reset()
{
nIndex = -1;
nParIndex = -1;
nType = -1;
nDeptIndex = -1;
tcValue[0] = NULL;
tcValueIndex[0] = NULL;
}
protected:
private:
};
{
public:
int nIndex; //索引
int nParIndex; //父索引
int nType; //类型 1为部门,2为人
int nDeptIndex; //所属部门索引
TCHAR tcValue[128]; //值
TCHAR tcValueIndex[128]; //值的索引
CLinkMan()
{
nIndex = -1;
nParIndex = -1;
nType = -1;
nDeptIndex = -1;
tcValue[0] = NULL;
tcValueIndex[0] = NULL;
}
CLinkMan(const CLinkMan& temp)
{
this->nIndex = temp.nIndex;
this->nParIndex = temp.nParIndex;
this->nType = temp.nType;
this->nDeptIndex = temp.nDeptIndex;
wsprintf(this->tcValue,_T("%s"),temp.tcValue);
wsprintf(this->tcValueIndex,_T("%s"),temp.tcValueIndex);
}
CLinkMan& operator = (CLinkMan& temp)
{
this->nIndex = temp.nIndex;
this->nParIndex = temp.nParIndex;
this->nType = temp.nType;
this->nDeptIndex = temp.nDeptIndex;
wsprintf(this->tcValue,_T("%s"),temp.tcValue);
wsprintf(this->tcValueIndex,_T("%s"),temp.tcValueIndex);
return *this;
}
void Reset()
{
nIndex = -1;
nParIndex = -1;
nType = -1;
nDeptIndex = -1;
tcValue[0] = NULL;
tcValueIndex[0] = NULL;
}
protected:
private:
};
最后的一些思考,在模版的设计里面,对于内存的申请,我是要多少,申请多少,应该可以考虑每次申请一批,慢慢用.
不过在结构不太大的情况下,应该没什么问题的.