template <class Type> Type& Array<Type> :: operator [(int i)( ∥/按数组名及下标i,取数组元素的值 if (i<0 1> ArraySize-1t cerr<<“数组下标超界<<endl; return NULL return element 1; 使用该函数于赋值语句 Pos= Position i-1]+ Number[i-1
template <class Type> Type& Array<Type> :: operator [ ] ( int i ) { //按数组名及下标 i,取数组元素的值 if ( i < 0 || i > ArraySize-1 ) { cerr << “数组下标超界”<< endl; return NULL; } return element[i]; } 使用该函数于赋值语句 Pos = Position[i -1] + Number[i -1]
template <class Type> void Array<Type>:: Resize int sz i if( sz >=0 & sz ! ArraySize)& Type newarray -new Type[sz; ∥创建新数组 if newarray== NULL)( cerr<<“存储分配错”<<endl; return, int n=( Sz<= ArraySize)? sz ArraySize; ∥/按新的大小确定传送元素个数
template <class Type> void Array<Type> :: Resize ( int sz ) { if ( sz >= 0 && sz != ArraySize ) { Type * newarray = new Type[sz]; //创建新数组 if ( newarray == NULL ) { cerr << “存储分配错” << endl; return; } int n = ( sz <= ArraySize ) ? sz : ArraySize; //按新的大小确定传送元素个数
ype* srcptr= elements;∥)原数组指针 Iype* destptr= newarray;∥标数组指针 while( n--)*destptr++=* srcptr++; /从源数组向目标数组传送 delete l elements; elements= newarray, ArraySize =sz
Type *srcptr = elements; //源数组指针 Type *destptr = newarray; //目标数组指针 while ( n-- ) * destptr++ = * srcptr++; //从源数组向目标数组传送 delete [ ] elements; elements = newarray; ArraySize = sz; } }
二维数组 三维数组 m1=5m2=4ma=6 m3 a[2][2 m 3×4×6 2×6 m2 m 1 m a[3][22] 行向量下标i 页向量下标i 列向量下标j 行向量下标j 列向量下标k
二维数组 三维数组 行向量 下标 i 页向量 下标 i 列向量 下标 j 行向量 下标 j 列向量 下标 k
数组的连续存储方式 一维数组 LOC(O LOC(i-1+=a+iLi>0 0123456789 35274918605477834102 +i“l LOC(=LOC(i-1)+l=a+i*l
数组的连续存储方式 ◼ 一维数组 35 27 49 18 60 54 77 83 41 02 0 1 2 3 4 5 6 7 8 9 l l l l l l l l l l LOC(i) = LOC(i-1)+l = a+i*l LOC(i) = LOC(i-1)+l = a+i*l, i > 0 a, i = 0 a+i*l a