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

Bagaimana untuk Mencipta Tatasusunan Dua Dimensi Dinamik dalam C?

Mary-Kate Olsen
Lepaskan: 2024-12-14 18:00:28
asal
128 orang telah melayarinya

How to Create Dynamic Two-Dimensional Arrays in C  ?

Mencipta Tatasusunan Dua Dimensi Dinamik dalam C

Dalam C , kaedah tradisional untuk mengisytiharkan tatasusunan melibatkan penetapan dimensinya pada masa penyusunan. Walau bagaimanapun, bagaimana jika anda perlu mencipta tatasusunan yang saiznya ditentukan secara dinamik berdasarkan input pengguna?

Vektor Vektor: vector>

Satu pendekatan ialah menggunakan vektor vektor. Vektor> akan mencipta tatasusunan dua dimensi yang dinamik, tetapi ini boleh memperkenalkan kedua-dua kelajuan dan overhed memori disebabkan oleh pelbagai lapisan alahan yang terlibat.

Kelas Matriks Tersuai

Untuk optimum prestasi, pertimbangkan untuk mencipta kelas matriks tersuai:

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]; }
};
Salin selepas log masuk

Kelas ini membolehkan anda mengakses elemen matriks menggunakan operator ringkas(), meniru sintaks tatasusunan dua dimensi.

Contoh Pelaksanaan Matriks

Untuk rujukan, berikut ialah pelaksanaan matriks 3D yang diperuntukkan secara statik menggunakan pelbagai peringkat proksi untuk menyokong pengendali [] sintaks:

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); }
};
Salin selepas log masuk

Penggunaan

Kedua-dua pelaksanaan boleh digunakan untuk mencipta dan memanipulasi tatasusunan dua dimensi dinamik dengan sintaks C yang biasa.

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

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan