基於使用者輸入的動態二維數組
了解在處理矩陣時對動態數組的需求,我們探索了各種方法來實現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中文網其他相關文章!