C++稀疏矩阵三元组存储与快速转置学习日志
一、项目背景
本日志记录了我用 C++ 实现稀疏矩阵三元组存储和快速转置算法的全过程。稀疏矩阵在实际应用中非零元素很少,采用三元组存储可以大幅节省空间。通过本次练习,我不仅巩固了 C++ 类、模板、内存管理等基础,还学习了如何用高效算法处理矩阵转置。时间:2025.10.8
二、主要设计内容
1. 三元组类 Ele
• 用于存储稀疏矩阵的非零元素,包括行、列和值。
• 支持拷贝构造和赋值运算符重载,方便对象管理。
2. 稀疏矩阵类 SparseMatrix
• 用动态数组存储所有非零元素的三元组。
• 支持构造、析构、拷贝构造、赋值运算符等基本操作。
• 实现了快速转置算法,时间复杂度 O(terms + cols)。
3. 异常处理与健壮性
• 构造函数对输入参数做了有效性检查,非法参数会抛出异常。
• 使用断言保证数组不越界,提升代码安全性。
三、遇到的问题与解决方法
1. 内存管理
• 动态数组需要手动分配和释放,最初忘记释放临时数组导致内存泄漏,后续补充了 delete 操作并将指针置为 nullptr。
2. 异常未捕获导致程序崩溃
• 构造函数抛出异常后,未用 try-catch 捕获,程序直接终止。后来在 main 函数中用 try-catch 包裹对象创建,优雅处理异常。
3. IDE警告与断言
• IDE提示数组可能越界,实际不会,但加了 assert(index < count) 进一步保证安全。
4. vector与数组的选择
• 讨论了用 std::vector 替代裸指针数组的优缺点。最终考虑到中间插入效率,保留了数组实现。
四、程序评价方法
• 健壮性:检查参数有效性、内存管理是否到位、异常处理是否完善。
• 可读性:注释是否清晰、变量命名是否规范、结构是否合理。
• 空间/时间复杂度:分析算法效率,是否有冗余空间分配。
• 可维护性:是否易于扩展和修改,是否有重复代码。
五、我的优化尝试
• 用 assert 保证数组不越界。
• 用 try-catch 捕获异常,提升健壮性。
• 讨论并尝试用 vector 替代数组,权衡安全性与性能。
• 代码结构逐步优化,注释和命名更加规范。
六、部分核心代码展示
template<typename T>
class Ele {
public:
int row, col;
T value;
// ... 构造、拷贝、赋值等
};
template<typename T>
class SparseMatrix {
public:
Ele<T>* eles;
int count, max_row, max_col;
// ... 构造、析构、赋值、转置等
void FastTranspose() {
// 快速转置算法
}
};
七、学习心得
通过本次练习,我对 C++ 的内存管理、异常处理、模板编程有了更深刻的理解。实际编码过程中遇到的问题和解决方案也让我体会到写健壮、易维护代码的重要性。后续会继续优化代码结构,并将项目上传到 GitHub 进行版本管理和分享。
---
GitHub 项目地址:
joey343736/data-struct_c-: This repository records my data_structure homework. I think it will be beneficial in the future.
---
如有问题或建议,欢迎评论交流!
---
更多推荐
所有评论(0)