首页 > 后端开发 > C++ > 如何用C实现动态二维数组?

如何用C实现动态二维数组?

Mary-Kate Olsen
发布: 2024-12-02 18:53:12
原创
916 人浏览过

How to Implement Dynamic Two-Dimensional Arrays in C  ?

基于用户输入的动态二维数组

了解在处理矩阵时对动态数组的需求,我们探索了各种方法来实现C 中的这种灵活性。

向量的向量(向量>)

向量组成的向量,表示矩阵,需要用户定义的类来处理行和列访问。虽然此方法允许动态调整大小的数组,但由于嵌套指针和内存开销,它可能会导致效率低下。

矩阵包装类模板

另一种方法是创建一个包装单个向量的模板类。包装器跟踪矩阵形状并提供访问函数:

template <class T>
class matrix {
    int columns_;
    std::vector<T> data;

public:
    matrix(int columns, int rows) : columns_(columns), data(columns * rows) {}

    T& operator()(int column, int row) { return data[row * columns_ + column]; }
};
登录后复制

此类使用operator()而不是operator[]提供方便的下标访问。

重载运算符[ ] 用于多维

对于那些喜欢使用运算符[]语法的人,可以在嵌套中重载它类结构:

template<class T, int size>
class matrix3 {
    T data[size][size][size];

    friend class proxy;
    friend class proxy2;

    class proxy {
        matrix3& m_;
        int index1_, index2_;
        public:
        proxy(matrix3& m, int i1, int i2) : m_(m), index1_(i1), index2_(i2) {}
        T& operator[](int index3) { return m_.data[index1_][index2_][index3]; }
    };

    class proxy2 {
        matrix3& m_;
        int index_;
        public:
        proxy2(matrix3& m, int d) : m_(m), index_(d) {}
        proxy operator[](int index2) { return proxy(m_, index_, index2); }
    };

public:
    proxy2 operator[](int index) { return proxy2(*this, index); }
};
登录后复制

此方法提供 C 风格的矩阵访问,但可能需要一些样板代码。

通过了解这些选项,您可以在以下情况下选择最适合您的特定要求的方法:在矩阵上下文中使用动态二维数组。

以上是如何用C实现动态二维数组?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板