实现稀疏矩阵的加法,C++
时间: 2024-11-09 17:27:25 浏览: 37
在C++中,稀疏矩阵通常是以压缩存储的形式实现,比如CS(Compressed Sparse Row)或CCS(Compressed Column Storage)。对于稀疏矩阵的加法,我们需要考虑只对非零元素进行操作,以节省内存和计算资源。
以下是一个简单的示例,假设我们有两个稀疏矩阵`MatrixA`和`MatrixB`,它们都是CSR(Compressed Sparse Row)格式:
```cpp
#include <vector>
#include <unordered_map>
// 定义稀疏矩阵的数据结构
struct SparseEntry {
int row;
int col;
double value;
};
class SparseMatrix {
private:
std::vector<int> rowPtr; // 存储每一行非零元素的起始位置
std::vector<int> colInd; // 存储每个非零元素的列索引
std::vector<double> values; // 存储非零元素的值
public:
void add(SparseMatrix &other) {
if (rowPtr.size() != other.rowPtr.size() || colInd.size() != other.colInd.size() || values.size() != other.values.size()) {
throw std::runtime_error("Matrices are not of the same size");
}
for (size_t i = 0; i < rowPtr.size(); ++i) {
int end = rowPtr[i + 1];
for (int j = rowPtr[i]; j < end; ++j) { // 遍历当前行的所有非零元素
int k = other.rowPtr[i] + (colInd[j] - rowPtr[i]); // 查找对应位置的其他矩阵元素
if (k < other.rowPtr[i + 1]) {
values[j] += other.values[k]; // 如果找到,相加并更新值
}
}
}
}
};
```
在这个例子中,`add`函数首先检查两个矩阵的尺寸是否匹配,然后遍历第一个矩阵的行,并在其对应的列上查找第二个矩阵的非零元素进行加法运算。如果找到了,就将值相加。
阅读全文