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

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

Susan Sarandon
リリース: 2024-11-29 04:08:08
オリジナル
785 人が閲覧しました

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

ユーザー入力に基づいて動的にサイズが設定される 2 次元配列

多くのプログラミング シナリオでは、コンパイル時に不明なサイズの配列または行列を作成する必要があります。時間。通常、配列の次元は固定されているため、これには課題が生じます。ただし、C は実行時にメモリを動的に割り当てるメカニズムを提供し、ユーザー入力に基づいたサイズの配列を作成できるようにします。

ベクトルの STL ベクトルを使用する

動的な 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 サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート