ホームページ >バックエンド開発 >C++ >C で動的 2 次元配列を作成するには?

C で動的 2 次元配列を作成するには?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-12-14 18:00:28126ブラウズ

How to Create Dynamic Two-Dimensional Arrays in C  ?

C での動的 2 次元配列の作成

C では、配列を宣言する従来の方法では、コンパイル時に配列の次元を指定します。ただし、ユーザー入力に基づいてサイズが動的に決定される配列を作成する必要がある場合はどうすればよいでしょうか?

ベクトルのベクトル: Vector>

1 つのアプローチは、ベクトルのベクトルを使用することです。ベクトル>動的な 2 次元配列が作成されますが、これには複数の間接層が含まれるため、速度とメモリのオーバーヘッドの両方が発生する可能性があります。

カスタム マトリックス クラス

最適化パフォーマンスを向上させるには、カスタム行列クラスの作成を検討してください:

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() を使用して行列要素にアクセスできます。 2 次元配列の構文を模倣します。

行列の実装例

参考までに、演算子をサポートするために複数レベルのプロキシを使用して静的に割り当てられた 3D 行列の実装を次に示します。 []構文:

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

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