C での動的 2 次元配列の作成
C では、配列を宣言する従来の方法では、コンパイル時に配列の次元を指定します。ただし、ユーザー入力に基づいてサイズが動的に決定される配列を作成する必要がある場合はどうすればよいでしょうか?
ベクトルのベクトル: Vector
1 つのアプローチは、ベクトルのベクトルを使用することです。ベクトル
カスタム マトリックス クラス
最適化パフォーマンスを向上させるには、カスタム行列クラスの作成を検討してください:
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() を使用して行列要素にアクセスできます。 2 次元配列の構文を模倣します。
行列の実装例
参考までに、演算子をサポートするために複数レベルのプロキシを使用して静的に割り当てられた 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 構文で動的 2 次元配列を作成および操作するために使用できます。
以上がC で動的 2 次元配列を作成するには?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。