#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; }
时间: 2024-10-13 00:24:18