多くのプログラミング シナリオでは、コンパイル時に不明なサイズの配列または行列を作成する必要があります。時間。通常、配列の次元は固定されているため、これには課題が生じます。ただし、C は実行時にメモリを動的に割り当てるメカニズムを提供し、ユーザー入力に基づいたサイズの配列を作成できるようにします。
動的な 2 次元オブジェクトを作成する 1 つのアプローチarray はベクトルのベクトルを利用することです。これには、他のベクトルを格納するベクトルを定義し、効率的に行列構造を作成することが含まれます。例:
std::vector<std::vector<int>> matrix(N);
これにより、内部ベクトルの各要素が行列内のセルを表す N 行 N 列の行列が作成されます。ただし、各内部ベクトルのサイズを変更したり値を個別に割り当てたりする必要があるため、他の方法と比べてメモリ効率が低くなることに注意することが重要です。
代替案このアプローチは、行列表現を抽象化し、動的メモリ割り当てを処理するラッパー クラスを作成することです。以下に例を示します。
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]; } };
このクラスは T 型の動的行列を定義します。コンストラクターは列と行の数を割り当て、関数 Operator() は直感的な関数を使用して行列の要素へのアクセスを提供します。行インデックスと列インデックス。
もう 1 つの手法には、配列添字演算子のオーバーロードが含まれます。 ([])。これにより、使い慣れた構文を使用して行列要素にアクセスできるようになります:
class Matrix { int columns_; std::vector<T> data; public: Matrix(int columns, int rows) : columns_(columns), data(columns * rows) {} T& operator[](const std::pair<int, int>& indices) { return data[indices.first * columns_ + indices.second]; } };
このアプローチを使用すると、次の方法で行列要素にアクセスできます:
T& element = matrix[std::make_pair(row, column)];
方法の選択は、特定のコンテキストとパフォーマンスの要件。ベクトルのベクトル、ラッパー クラス、演算子のオーバーロードのいずれを利用する場合でも、これらの手法により、C で動的な 2 次元配列を作成および操作する柔軟性が得られます。
以上がユーザー入力に基づいて C で動的にサイズ変更された 2 次元配列を作成するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。