C++实现对称矩阵以及压缩存储

来源:互联网 发布:信捷p乚c编程软件下载 编辑:程序博客网 时间:2024/06/06 03:05
#include<iostream>using namespace std;///////////////////////////实现对称矩阵以及压缩存储/////////////////////////////////////template<typename T>class SymmetricMatrix{friendostream& operator<<(ostream& _cout, SymmetricMatrix<int>& s);//声明一个友元重载输出符号public:SymmetricMatrix(int* a, size_t N)//用一个一维数组来存储对称矩阵:_N(N){int idex = 0;_pData = new T[N*(N+1)/2];//开辟一个下三角形或上三角形元素个数的空间for(int i = 0; i < N; i++){for(int j = 0; j <= i; j++){_pData[idex++] = a[i*N + j];//偏移过去一行的元素,用一维数组存储}}}T& Acess(int row, int col)//访问下三角形中的元素{if(col > row)//下三角形元素下标row>colstd::swap(row, col);//不是下三角就横纵坐标互换return _pData[row*(row+1)/2+col];}const T& Acess(int row, int col)const{if(col > row)std::swap(row, col);return _pData[row*(row+1)/2+col];//返回下三角元素}~SymmetricMatrix(){if(_pData){delete[] _pData;    _pData = NULL;    _N = 0;}}private:T* _pData;size_t _N;};ostream& operator<<(ostream& _cout, SymmetricMatrix<int>& s)//输出运算符重载{for(int i = 0; i < s._N; i++){for(int j = 0; j < s._N; j++)_cout<<s.Acess(i,j)<<" ";_cout<<endl;}return _cout;}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,5);cout<<sm.Acess(3,0)<<endl;cout<<sm;system("pause");return 0;}

程序运行结果


0 0
原创粉丝点击