Rumah >pembangunan bahagian belakang >C++ >Bagaimana untuk Melaksanakan Tatasusunan Dua Dimensi Dinamik dalam C?

Bagaimana untuk Melaksanakan Tatasusunan Dua Dimensi Dinamik dalam C?

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-12-02 18:53:12918semak imbas

How to Implement Dynamic Two-Dimensional Arrays in C  ?

Susun Dua Dimensi Dinamik Berdasarkan Input Pengguna

Memahami keperluan tatasusunan dinamik apabila bekerja dengan matriks, kami meneroka pelbagai pendekatan untuk mencapai fleksibiliti ini dalam C .

Vektor Vektor (vektor>)

Vektor vektor, yang mewakili matriks, memerlukan kelas yang ditentukan pengguna untuk mengendalikan akses baris dan lajur. Walaupun kaedah ini membenarkan tatasusunan boleh ubah saiz dinamik, ia boleh memperkenalkan ketidakcekapan disebabkan penunjuk bersarang dan overhed memori.

Templat Kelas Pembungkus Matriks

Pendekatan alternatif ialah mencipta kelas templat yang membungkus satu vektor. Pembalut menjejaki bentuk matriks dan menyediakan fungsi akses:

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]; }
};

Kelas ini menyediakan akses subskrip yang mudah menggunakan operator() dan bukannya operator[].

Operator Lebih Muatan[ ] untuk Berbilang Dimensi

Bagi mereka yang lebih suka menggunakan sintaks operator[], anda boleh membebankannya secara berlebihan dalam sintaks bersarang struktur kelas:

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); }
};

Pendekatan ini menyediakan akses matriks gaya C tetapi mungkin memerlukan beberapa kod boilerplate.

Dengan memahami pilihan ini, anda boleh memilih pendekatan yang paling sesuai untuk keperluan khusus anda apabila bekerja dengan tatasusunan dua dimensi dinamik dalam konteks matriks.

Atas ialah kandungan terperinci Bagaimana untuk Melaksanakan Tatasusunan Dua Dimensi Dinamik dalam C?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn