/*
carray是一个动态数组类,且提供了无限扩展的能力,您可以用它来定义一个n维数组,并且每一序列的数组长度不需要相同。
carray<class T> name(long num) 表示创建一个初始长度为num,类型为T的数组
void carray::del() 表示清空数组
void carray::create(long num) 表示创建一个长度为num的数组
void carray::add(carray<T1>& x,long i)表示将另一个carray x与当前carray的第i个元素对接,形成第二维度。
void expand(a[i][j][k]...,long i): 注意这不是carray的成员函数。它将在a[i][j][k]...之后创建一维,且该维长度为i
注意,如果要创建一个n维数组,应当在创建carray时设定class T为多维指针类型,例如int*****(包含(n-1)个*号),并且从此将最多只能创建n维数组。
*/
#include<stddef.h>
template<class T>
class carray{
public:
long num;
T* start;
carray(){
num=0;
start=NULL;
}
carray(long len){
num=len;
start=new T[len];
}
~carray(){
delete[] start;
}
T& operator [](long i){
return *(start+i);
}
void del(){
delete[] start;
}
void create(long len){
del();
start=new T[len];
num=len;
}
template<class T1>
void add(carray<T1>& x,long i){
*(start+i)=x.start;
}
template<class T2>
void expand(T2*& x,int len){
static carray<T2> a(len);
x=a.start;
}
};
template<class T2>
void expand(T2*& x,int len){
static carray<T2> a(len);
x=a.start;
}