ホームページ >バックエンド開発 >C++ >ユーザー入力に基づいて C で動的な 2 次元配列を作成するにはどうすればよいですか?

ユーザー入力に基づいて C で動的な 2 次元配列を作成するにはどうすればよいですか?

Patricia Arquette
Patricia Arquetteオリジナル
2024-12-08 22:25:11835ブラウズ

How Can I Create Dynamic Two-Dimensional Arrays in C   Based on User Input?

ユーザー入力に基づいた動的 2 次元配列の宣言

はじめに

次のことができる動的 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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。