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