#ifndef _NAIVE_SPARSE_MATRIX_ #define _NAIVE_SPARSE_MATRIX_ #include <iostream> #include <cmath> #include <cstring> class NaiveSparseMatrix { private: int elementNum; int rowNum, columnNum; float *elementValue; int *columnIndex; int *rowIndex; public: NaiveSparseMatrix(int eleNum, int rNum, int cNum, int* cIndex, int* rIndex, float* eleValue); ~NaiveSparseMatrix(); float getElementAt(int cIndex, int rIndex); void transpose(); }; #endif #include "NaiveSparseMatrix.h" NaiveSparseMatrix::NaiveSparseMatrix( int eleNum, int rNum, int cNum, int* cIndex, int* rIndex, float* eleValue ) { elementNum = eleNum; rowNum = rNum; columnNum = cNum; elementValue = new float[elementNum]; memcpy(elementValue, sizeof(float)*elementNum, eleValue); columnIndex = new int[elementNum]; memcpy(columnIndex, sizeof(int)*elementNum, cIndex); rowIndex = new int[elementNum]; memcpy(rowIndex, sizeof(float)*elementNum, rIndex); } NaiveSparseMatrix::~NaiveSparseMatrix() { delete[] elementValue; delete[] columnIndex; delete[] rowIndex; } void NaiveSparseMatrix::transpose() { int tmp; tmp = columnNum; columnNum = rowNum; rowNum = tmp; for(int i=0;i<elementNum;i++) { tmp = columnIndex[i]; columnIndex[i] = rowIndex[i]; rowIndex[i] = tmp; } } float NaiveSparseMatrix::getElementAt( int cIndex, int rIndex ) { if(cIndex >= 0 && cIndex < columnNum && rIndex >= 0 && rIndex < rowNum) { float result = 0.0; for(int i=0;i<elementNum;i++) { if(columnIndex[i] == cIndex && rowIndex[i] == rIndex) { result = elementValue[i]; break; } } return result; } else { cerr<<"index incorrect!"<<endl; return 0.0; } }