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

来源:互联网 发布:淘宝驳回售后服务 编辑:程序博客网 时间:2024/06/14 12:49
#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;}

0 0
原创粉丝点击