はじめに
次のことができる動的 2 次元配列の作成ユーザー入力に基づいてカスタマイズすることは、C プログラミングに課題をもたらします。通常、配列は宣言時に固定サイズですが、この特定のタスクではサイズ決定に柔軟性が必要です。このような配列を動的に割り当てて操作するためのさまざまなアプローチを検討してみましょう。
ベクトルのベクトルによるアプローチ
ベクトルのベクトル (vector
int n; cin >> n; vector<vector<int>> matrix(n, vector<int>(n));
カスタム行列クラス
別のオプションは、カスタム行列を実装することです。 2 次元配列を動的に管理する機能をカプセル化するクラス。このアプローチにより、データ構造をより詳細に制御でき、効率的なメモリ管理が可能になります。
template <class T> class Matrix { int columns_; 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 次元配列。このアプローチは、プロキシを活用して間接的にデータにアクセスし、従来の配列アクセスに似た構文を提供します。
template<class T, int size> class Matrix3 { T data[size][size][size]; class Proxy { Matrix3& m_; int index1_, index2_; }; class Proxy2 { Matrix3& m_; int index_; }; public: Proxy2 operator[](int index) { return Proxy2(*this, index); } Proxy operator[](int index1, int index2) { return Proxy(*this, index1, index2); } };
結論
各アプローチは、さまざまなレベルの柔軟性と効率を提供します。 、実装の容易さ。ベクトルのベクトルのアプローチは単純ですが、複数レベルの間接化によりパフォーマンスに影響を与える可能性があります。カスタム マトリックス クラスにより、メモリ管理と柔軟性をより詳細に制御できます。 Operator[] アプローチの複数のオーバーロードを使用すると、使い慣れた構文を使用して要素にアクセスできますが、より複雑な実装が必要になります。最終的には、アプリケーションの特定の要件によって選択が決まります。
以上がユーザー入力に基づいて C で動的な 2 次元配列を作成するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。