C++实现对称矩阵的压缩存储
2016-05-21 14:49
666 查看
#include <iostream> using namespace std; /*对称矩阵及对称矩阵的压缩存储*/ template<class T> class SymmetricMatrix { public: SymmetricMatrix(T* a, size_t N) :_a(new T[N*(N+1)/2]) ,_n(N) { size_t index = 0; for (size_t i = 0; i < N; ++i) { for (size_t j = 0; j < N; ++j) { if (i >= j) { _a[index++] = a[i*N+j]; } else { break; } } } } ~SymmetricMatrix() { if (_a) { delete[] _a; } } T& Access(size_t i, size_t j) { if (i < j) { swap(i, j); } return _a[i*(i+1)/2+j]; } void Display() { for (size_t i = 0; i < _n; ++i) { for (size_t j = 0; j < _n; ++j) { if (i >= j) { cout<<_a[i*(i+1)/2+j]<<" "; } else { cout<<_a[j*(j+1)/2+i]<<" "; } } cout<<endl; } } protected: T* _a;//对称矩阵的压缩存储的一维数组 size_t _n;//对称矩阵的行列数 }; void Test() { int array[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*)array, 5); sm.Display(); } int main() { Test(); return 0; }
本文出自 “zgw285763054” 博客,请务必保留此出处http://zgw285763054.blog.51cto.com/11591804/1775678
相关文章推荐
- C++第六次作业
- C++实验6—数组合并
- c++中成员初始化列表的问题
- 第六次C++上机作业
- 为什么使用指针比使用对象本身更好?
- C语言动态分配内存
- C语言回调函数 2
- 求最短路径———Dijkstra算法和Floyd算法
- C语言结构体占用空间内存大小解析
- C语言知识体系框架
- 第十三周项目 4 立体类族共有的抽象类
- 第十三周项目 3 形状类族的中的纯虚函数
- 【C语言】用mktime函数获取一个日期是星期几
- 二叉树的深度优先遍历与广度优先遍历 [ C++ 实现 ]
- c++11标准——泛型算法
- IOS中的Block在C++中的运用
- C++随笔:.NET CoreCLR之corleCLR核心探索之coreconsole(2)
- 第十三周项目 动物这样叫 2.3
- 第十三周项目 动物这样叫2.2
- c++实验六-数组合并