C++实现对称矩阵的压缩存储
#include<iostream>usingnamespacestd;/*对称矩阵及对称矩阵的压缩存储*/template<classT>classSymmetricMatrix{public:SymmetricMatrix(T*a,size_tN):_a(newT[N*(N+1)/2]),_n(N){size_tindex=0;for(size_ti=0;i<N;++i){for(size_tj=0;j<N;++j){if(i>=j){_a[index++]=a[i*N+j];}else{break;}}}}~SymmetricMatrix(){if(_a){delete[]_a;}}T&Access(size_ti,size_tj){if(i<j){swap(i,j);}return_a[i*(i+1)/2+j];}voidDisplay(){for(size_ti=0;i<_n;++i){for(size_tj=0;j<_n;++j){if(i>=j){cout<<_a[i*(i+1)/2+j]<<"";}else{cout<<_a[j*(j+1)/2+i]<<"";}}cout<<endl;}}protected:T*_a;//对称矩阵的压缩存储的一维数组size_t_n;//对称矩阵的行列数};voidTest(){intarray[5][5]={{0,1,2,3,4},{1,0,1,2,3},{2,1,0,1,2},{3,2,1,0,1},{4,3,2,1,0},};SymmetricMatrix<int>sm((int*)array,5);sm.Display();}intmain(){Test();return0;}
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。