对称矩阵的基本操作及其压缩存储

xiaoxiao2021-02-27  276

#include<iostream> using namespace std; template<class T> class SymmetricMatrix { public: SymmetricMatrix(int* a, size_t N):_row(N),_col(N) { size_t index=0; _pData =new T[N*(N+1)>>1]; for(int i=0;i<N;i++) { for(int j=0;j<=i;j++) { _pData[index++]=a[i*N+j]; } } } T& Acess(int row, int col) { //上三角 if(row<col) std::swap(col,row); return _pData[row*(row+1)/2+col]; } const T& Acess(int row, int col)const { //上三角 if(row<col) std::swap(col,row); return _pData[row*(row+1)/2+col]; } ~SymmetricMatrix() { if(_pData) { delete[] _pData; _pData=NULL; } } // ostream& operator<<(ostream& _cout,const Complex& c)//<< //{ // // if(c._image>-0.000001&&c._image<0.000001) // _cout<<c._real; // else // _cout<<c._real<<"+("<<c._image<<")i"; // return _cout; //} template<typename T> friend ostream& operator<<(ostream& _cout,const SymmetricMatrix<T>& s) { for(size_t i=0;i<s._row;i++) { for(size_t j=0;j<s._col;j++) _cout<<s.Acess(i,j)<<" "; _cout<<endl; } return _cout; } private: T* _pData; size_t _row; size_t _col; }; int main() { int a[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*)a,sizeof(a)/sizeof(a[0])); int res=sm.Acess(2,3); cout<<sm; return 0; }
转载请注明原文地址: https://www.6miu.com/read-7719.html

最新回复(0)