首頁 >後端開發 >C++ >如何在 C 中建立動態二維數組?

如何在 C 中建立動態二維數組?

Mary-Kate Olsen
Mary-Kate Olsen原創
2024-12-14 18:00:28128瀏覽

How to Create Dynamic Two-Dimensional Arrays in C  ?

在 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()來存取矩陣元素,模仿語法二維數組的。

範例矩陣實作

供參考,這裡是一個靜態分配的 3D 矩陣實現,使用多個層級的代理來支援運算符[]語法:

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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn