第五章 数组、字符串、集合类
第五章 数组、字符串、集合类
5.1数组 。数组:是具有一定顺序关系的若干对象的集合 体,组成数组的对象成为该数组的元素。 [例]向量、矩阵等。 a11 a12 a13 a21 a22 823 a31 a32 333 数组名:表示群体的共性(具有同一种数据类型) 下标:表示个体的个性(各自占有独立的单元)
5.1 数组 ● 数组:是具有一定顺序关系的若干对象的集合 体,组成数组的对象成为该数组的元素。 [例] 向量、矩阵等。 a11 a12 a13 a21 a22 a23 a31 a32 a33 数组名:表示群体的共性(具有同一种数据类型) 下标:表示个体的个性(各自占有独立的单元)
5.1.1顺序存储的数组 ● n维数组:每个元素有n个下标的数组称为n 维数组。 [例]inta[10]; f1oatb[3][4];☐ intc[5][6][4];/三维数组
5.1.1 顺序存储的数组 ● n维数组:每个元素有 n 个下标的数组称为 n 维数组。 [例] int a[10]; float b[3][4]; int c[5][6][4]; //三维数组
。数组的存储 ①数组元素在内存中是顺序、连续存储的; ②数组的存储分配按行(列)进行; ③数组名字表示该数组的首元素地址,是常量 1、-一维数组 对于一维数组而言,各元素按下标次序依次存放 如a[0],a[1],a[2],.等等。且有: &a[0]: &a[1]: &a[2]:
● 数组的存储 ① 数组元素在内存中是顺序、连续存储的; ② 数组的存储分配按行(列)进行; ③ 数组名字表示该数组的首元素地址,是常量。 1、一维数组 对于一维数组而言,各元素按下标次序依次存放, 如a[0],a[1],a[2],…等等。且有: &a[0]: &a[1]: &a[2]:
数组中任一元素A的地址可表示为: Loc(a[i])=Loc(a[0J)+i*C C为每个元素占用存储空间的字节数。 2、二维数组 按行存放 [例]intx[2][3]//有2×3个数组元素 x[0][0]x[0][1]x[0][2] x[1][0]x[1][1]x[1][2]
数组中任一元素A[i]的地址可表示为: Loc(a[i]) = Loc(a[0]) +i*C C为每个元素占用存储空间的字节数。 2、二维数组 按行存放 [例] int x[2][3] // 有2×3个数组元素 x[0][0] x[0][1] x[0][2] x[1][0] x[1][1] x[1][2]
x[0][0]x[0][1]x[0][2] x[1][0]x[1][1]x[1][2] 其存储分配顺序为: x[0][0]->x[0][1]->x[0][2]->x[1][0]->x[1][1]->x[1][2] &x[0][0] &x[0][1] &x[0][2] &x[1][0] &x[1][1] &x[1][2]
x[0][0] x[0][1] x[0][2] x[1][0] x[1][1] x[1][2] 其存储分配顺序为: x[0][0]->x[0][1]->x[0][2]->x[1][0]->x[1][1]->x[1][2] &x[0][0] &x[0][1] &x[0][2] &x[1][0] &x[1][1] &x[1][2]
二维数组可以看作是一种特殊的一维数组。 [例]f1oata[3][4]; B[o] aLolLol aLolTIT a[0J[2J a[01[31 a B[1] 1一a[Lol ala[[2Ja[叮[3町 b[2]一a[2]L0]a[2][1a[2J[2Ja[2J[3J □二维数组元素a[i][j]的地址可以这样得到:□ Loc(a [i][j])=Loc(B[i])+j*C Loc(B[i])=Loc(B[O])+i*C /C=n*C Loc(a[i][j])=Loc(a[O][0])+i*n*C+j*C = Loc(a[0][0])+(i*n+j)*C [例]Loc(a[1][2])=a+(in+j)C =a+(1*4+2)*4=a+24
二维数组可以看作是一种特殊的一维数组。 [例] float a[3][4]; B[0] a[0][0] a[0][1] a[0][2] a[0][3] a- B[1] a[1][0] a[1][1] a[1][2] a[1][3] B[2] a[2][0] a[2][1] a[2][2] a[2][3] 二维数组元素a[i][j] Loc(a [i][j]) = Loc(B[i]) +j*C Loc(B[i]) = Loc(B[0]) + i*C’ // C’=n*C Loc(a[i][j]) = Loc(a[0][0]) + i*n*C+j*C = Loc(a[0][0]) + (i*n+j)*C [例] Loc(a[1][2]) = a+(i*n+j)C =a+(1*4+2)*4 = a+24
3、三维数组 多维数组元素在内存中的排序顺序为:第一维 的下标变化最慢,最右边的下标变化最快。 [例]☐f1oata[2][3][4];☐ a0]I01[0]→a0]0]1]→a[0][0]l2]→a00]3]→ a0][10]一→a0][1[1]→a0][1[2]一→a0[1][3]→ a0]l2][0-→a0][2][1]→a0[2][2]一→a0]l2]3]→ a1I0]I0]→a1][0][1→a1]I0][2]→a1]I0]3] a11][0]→a1][11→a1][12]→a11]3] a1[20一→a1川21→a1l2[2→a1]川2]3]
3、三维数组 多维数组元素在内存中的排序顺序为:第一维 的下标变化最慢,最右边的下标变化最快。 [例] float a[2][3][4]; a[0][0][0]→a[0][0][1]→a[0][0][2]→a[0][0][3]→ a[0][1][0]→a[0][1][1]→a[0][1][2]→a[0][1][3]→ a[0][2][0]→a[0][2][1]→a[0][2][2]→a[0][2][3]→ a[1][0][0]→a[1][0][1]→a[1][0][2]→a[1][0][3] a[1][1][0]→a[1][1][1]→a[1][1][2]→a[1][1][3] a[1][2][0]→a[1][2][1]→a[1][2][2]→a[1][2][3]
5.1.2 静态数组和动态数组 1动态数组类Array的定义 ◆声明: include include template class Array private: int FSize; T*alist; void Allocate();
5.1.2 静态数组和动态数组 1 动态数组类 Array 的定义 声明: # include # include template class Array { private: int FSize; T* alist; void Allocate( );
public: Array(int sz=50); Array(const Array &x ) Array(void delete[alist; Array&operator=(const Array&x) T&operator[](int i); ArrayOperator T*(void)const (return alist; int ListSize(void)const return Fsize;}
public: Array( int sz=50 ); Array( const Array & x ); Array( void ) { delete[ ] alist;} Array& operator=(const Array& x); T& operator[ ](int i); Array Operator T*(void)const {return alist;} int ListSize(void) const { return Fsize;} ~