一、项目背景


本日志记录了我用 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.
---
如有问题或建议,欢迎评论交流!
---

Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐