首頁 > 後端開發 > C++ > 如何用C實作動態二維數組?

如何用C實作動態二維數組?

Mary-Kate Olsen
發布: 2024-12-02 18:53:12
原創
915 人瀏覽過

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
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板