基于用户输入的动态二维数组
了解在处理矩阵时对动态数组的需求,我们探索了各种方法来实现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中文网其他相关文章!