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