c++ 生成采用三元组实现稀疏矩阵的存储与运算的代码
时间: 2024-02-03 15:12:50 浏览: 93
以下是一个简单的实现,实现了稀疏矩阵的存储和两个矩阵相加的运算。
```cpp
#include <iostream>
#include <vector>
using namespace std;
// 三元组存储稀疏矩阵
struct Triplet {
int i, j, val;
};
class SparseMatrix {
public:
SparseMatrix(int row, int col) : m(row), n(col) {}
// 转换为三元组存储
void to_triplet(vector<Triplet>& triplets) const {
for (int i = 0; i < m; ++i) {
for (int j = 0; j < n; ++j) {
if (data[i][j] != 0) {
triplets.push_back({i, j, data[i][j]});
}
}
}
}
// 矩阵加法
SparseMatrix operator+(const SparseMatrix& other) const {
if (m != other.m || n != other.n) {
throw "矩阵大小不一致";
}
SparseMatrix res(m, n);
for (int i = 0; i < m; ++i) {
for (int j = 0; j < n; ++j) {
res.data[i][j] = data[i][j] + other.data[i][j];
}
}
return res;
}
private:
int m, n;
vector<vector<int>> data; // 稠密矩阵
};
int main() {
SparseMatrix mat1(3, 3);
mat1.data = {{1, 0, 0}, {0, 2, 0}, {0, 0, 3}};
SparseMatrix mat2(3, 3);
mat2.data = {{4, 0, 0}, {0, 5, 0}, {0, 0, 6}};
SparseMatrix res = mat1 + mat2;
vector<Triplet> triplets;
res.to_triplet(triplets);
cout << "三元组表示:" << endl;
for (const auto& t : triplets) {
cout << "(" << t.i << ", " << t.j << ", " << t.val << ")" << endl;
}
return 0;
}
```
注意,这里实现的是稀疏矩阵加法,对于其他的矩阵运算,可以类似地实现。同时,如果需要更高效的实现,可以考虑使用稀疏矩阵的其他存储方式,比如压缩行/列存储。
阅读全文