Rumah >pembangunan bahagian belakang >C++ >Bagaimana untuk Melaksanakan Tatasusunan Dua Dimensi Dinamik dalam 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!