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