#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;
}
对称矩阵的基本操作及其压缩存储
最新推荐文章于 2023-11-09 21:12:19 发布