对称矩阵压缩存储

压缩矩阵:对称矩阵存储时只需要存储上三角或下三角的数据,所以最多存储n*(n+1)/2个数据。
对称矩阵和对称压缩存储的对应关系:

下三角存储i>=j,SymmetricMatrix[i][j] == Array[i*(i+1)/2+j]//压缩存储矩阵
template<class T>
class Square
{
public:
Square(T *arr,size_t N)
:_row(N)
, _col(N)
{
size_t idx = 0;
P_data = new T[(N*(N + 1))>>1];
for (size_t i = 0; i < N; ++i)
{
for (size_t j=0; j <=i; ++j)
{
P_data[idx++] = arr[i*N + j];
}
}
}
T Acess(int row, int col)
{
if (col>=row)
std::swap(row, col);
return (P_data[row*(row + 1) / 2 + col]);
}
const T& Acess(int row, int col)const
{
if (col > row)
std::swap(row, col);
return (P_data[row*(row + 1) / 2 + col]);
}


friend  ostream& operator << (ostream& output, Square<T>& s)
{
for (size_t i = 0; i < s._row; ++i)
{
for (size_t j = 0; j < s._col; ++j)
{
output << s.Acess(i, j) << " ";
}
output << endl;
}
return output;
}
~Square()
{
if (P_data)
{
delete[]P_data;
P_data = NULL;
}
}
private:
T *P_data;
size_t _row;
size_t _col;
};


int main()
{
int arry[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 }
};
Square <int>s(*arry, sizeof(arry) / sizeof(arry[0]));
cout << s.Acess(4, 1) << endl;
cout << s.Acess(1, 4) << endl;
cout << s << endl;
system("pause");
return 0;
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值