ホームページ > バックエンド開発 > C++ > C で動的 2 次元配列を実装するにはどうすればよいですか?

C で動的 2 次元配列を実装するにはどうすればよいですか?

Mary-Kate Olsen
リリース: 2024-12-02 18:53:12
オリジナル
916 人が閲覧しました

How to Implement Dynamic Two-Dimensional Arrays in C  ?

ユーザー入力に基づく動的 2 次元配列

行列を操作する際の動的配列の必要性を理解し、それを実現するためのさまざまなアプローチを検討します。 C のこの柔軟性。

ベクトルのベクトル(vector>)

行列を表すベクトルのベクトルには、行と列へのアクセスを処理するユーザー定義クラスが必要です。この方法では動的にサイズ変更可能な配列が可能ですが、ネストされたポインターとメモリのオーバーヘッドにより非効率が生じる可能性があります。

Matrix Wrapper Class Template

別のアプローチは、単一のベクトルをラップするテンプレート クラス。ラッパーは行列の形状を追跡し、アクセス関数を提供します。

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[] の代わりに Operator() を使用した便利な添字アクセスを提供します。

オーバーロード Operator[ ] 複数のディメンション用

operator[] 構文を使用したい場合は、それをオーバーロードすることができます。ネストされたクラス構造:

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

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