SparseMatrix.hpp
#pragma once
#include<iostream>
using namespace std;
#include<vector>
template<class T>
struct Triple{
T _value;
size_t _row;
size_t _col;
};
#define ROW 6
#define COL 5
template<class T>
class SparseMatrix{
public:
SparseMatrix(int* matrix,size_t row,size_t col,const T& invalid):_row(row),_col(col){
for (size_t i = 0; i < row; ++i){
for (size_t j = 0; j < col; ++j){
if (matrix[i*col + j] != invalid){
Triple<T> t;
t._row = i;
t._col = j;
t._value = matrix[i*col + j];
_array.push_back(t);
}
}
}
}
void Display(){
size_t index = 0;
for (int i = 0; i < _row; ++i){
for (int j = 0; j < _col; ++j){
if (index < _array.size()
&& i == _array[index]._row
&& j == _array[index]._col){
cout << _array[index]._value << " ";
index++;
}
else
cout << "0" << " ";
}
cout << endl;
}
cout << endl;
}
SparseMatrix<T> TransposeSMatrix(int* matrix){
SparseMatrix<T> tmp(matrix,ROW,COL,0);
tmp._row = _col;
tmp._col = _row;
size_t count = 0;
for (int i = 0; i < _col; ++i){
size_t index = 0;
for (index = 0; index < _array.size();++index){
if (_array[index]._col == i){
tmp._array[count]._row = _array[index]._col; //transpose
tmp._array[count]._col = _array[index]._row;
tmp._array[count]._value = _array[index]._value;
count++;
}
}
}
tmp.Display();
return tmp;
}
private:
vector<Triple <T>> _array;
size_t _row;
size_t _col;
};
void test(){
int matrix[ROW][COL] = { { 1, 0, 3, 0, 5 }, { 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0 }, { 1, 0, 3, 0, 5 }, { 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0 } };
SparseMatrix<int > sm((int*)matrix, ROW, COL,0);
sm.Display();
sm.TransposeSMatrix((int *)matrix);
}
main.cpp
#include<iostream>
using namespace std;
#include"SparseMatrix.hpp"
int main(){
test();
return 0;
}
转载于:https://blog.51cto.com/molova/1709570