C 模版類實現稀疏矩陣(轉置運算和快速轉置運算)

2021-10-03 03:05:55 字數 1986 閱讀 4149

在完成稀疏矩陣的實現時,主要遇到了兩個問題:

複製建構函式傳引數一般應該為const引用型別,否則在sparsematrixb(a.transpose())等情況下會出問題,過載賦值符號時也一樣,引數應設為const引用型別。(似乎和左右值有關?待深入研究)

在轉置函式和快速轉置函式中,陣列元素三元組中的行和列都是我們輸入的值,是從1開始的,而在陣列中是從0開始的,這一點要千萬注意。

1、sparsematrix.h

#ifndef sparsematrix_h

#define sparsematrix_h

#include using std::ostream;

using std::istream;

const int defaultsize = 100;

template struct trituple

};template class sparsematrix

sparsematrix& operator=(const sparsematrix& x);

sparsematrixtranspose();

sparsematrixfasttranspose();

//sparsematrixadd(sparsematrix& b);

//sparsematrixmultiply(sparsematrix& b);

template friend ostream& operator<<(ostream& out, sparsematrix& m);

template friend istream& operator>>(istream& in, sparsematrix& m);

};#endif /* sparsematrix_h */

2、sparsematrix.cpp

#include #include "sparsematrix.h"

using std::endl;

using std::cerr;

using std::cout;

template sparsematrix::sparsematrix(int maxsz) : maxterms(maxsz)

smarray = new trituple[maxsz];

if(smarray == null)

rows = cols = terms = 0;

}template sparsematrix::sparsematrix(const sparsematrix& x)

for(int i = 0; i < terms; i++)

smarray[i] = x.smarray[i];

}template sparsematrix& sparsematrix::operator=(const sparsematrix& x)

template ostream& operator<<(ostream& out, sparsematrix& m)

template istream& operator>>(istream& in, sparsematrix& m)

for(int i = 0; i < m.terms; i++)

return in;

}//稀疏矩陣轉置演算法

template sparsematrixsparsematrix::transpose()

}return b;

}//稀疏矩陣快速轉置演算法

template sparsematrixsparsematrix::fasttranspose()

}delete rowstart;

delete rowsize;

return b;

}

3、main.cpp

#include #include "sparsematrix.cpp"

using std::cin;

int main()

C 稀疏矩陣轉置

問題描述 稀疏矩陣轉置 設計思路 稀疏矩陣中存在大量非零元素,直接轉置執行時間較高。因而採用三元組表示。按照壓縮的概念,只儲存稀疏矩陣中的非零元素,除了儲存非零元素的值之外,還必須同時記下它所在的行列位置。三元組表示法是用乙個具有三個資料域的一維陣列表示稀疏矩陣,每一行有三個字段,分別該元素的行下表...

稀疏矩陣的轉置(矩陣轉置和快速轉置)

實現矩陣的轉置 1.將矩陣的行列值相互轉換。2.將每個三元組中的i和j交換。3.重排三元組之間的次序便可實現矩陣的轉置。void transposesmatrix tsmatrix m,tsmatrix t return transposesmatrix快速轉置的原理是 如果能預先確定矩陣m中每一列...

稀疏矩陣儲存 轉置 乘法運算

使用順序儲存結構儲存稀疏矩陣,並實現轉置和乘法運算。include stdio.h include stdlib.h include string.h 順序結構的稀疏矩陣 轉置 乘法 define xishu max 100 define xishu increment 100 typedef st...