Dalam banyak senario pengaturcaraan, adalah perlu untuk mencipta tatasusunan atau matriks dengan saiz yang tidak diketahui semasa penyusunan- masa. Ini menimbulkan cabaran kerana tatasusunan biasanya mempunyai dimensi tetap. Walau bagaimanapun, C menawarkan mekanisme untuk memperuntukkan memori secara dinamik pada masa jalan, membolehkan penciptaan tatasusunan dengan saiz berdasarkan input pengguna.
Satu pendekatan untuk mencipta dua dimensi dinamik array adalah untuk menggunakan vektor vektor. Ini melibatkan penentuan vektor yang menyimpan vektor lain, dengan berkesan mewujudkan struktur matriks. Contohnya:
std::vector<std::vector<int>> matrix(N);
Ini menghasilkan matriks N-demi-N di mana setiap elemen dalam vektor dalam mewakili sel dalam matriks. Walau bagaimanapun, adalah penting untuk ambil perhatian bahawa setiap vektor dalam perlu diubah saiz atau diberikan nilai secara individu, menjadikannya kurang cekap memori berbanding kaedah lain.
Alternatif pendekatan adalah untuk mencipta kelas pembalut yang mengabstraksi perwakilan matriks dan mengendalikan peruntukan memori dinamik. Berikut ialah contoh:
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 mentakrifkan matriks dinamik jenis T, di mana pembina menetapkan bilangan lajur dan baris, dan operator fungsi() menyediakan akses kepada elemen matriks menggunakan intuitif indeks baris dan lajur.
Teknik lain melibatkan melebihkan operator subskrip tatasusunan ([]). Ini membolehkan kami mengakses elemen matriks menggunakan sintaks biasa:
class Matrix { int columns_; std::vector<T> data; public: Matrix(int columns, int rows) : columns_(columns), data(columns * rows) {} T& operator[](const std::pair<int, int>& indices) { return data[indices.first * columns_ + indices.second]; } };
Menggunakan pendekatan ini, kita boleh mengakses elemen matriks melalui:
T& element = matrix[std::make_pair(row, column)];
Pilihan kaedah bergantung pada yang khusus konteks dan keperluan prestasi. Sama ada menggunakan vektor vektor, kelas pembalut atau operator lebih muatan, teknik ini memberikan kefleksibelan untuk mencipta dan memanipulasi tatasusunan dua dimensi dinamik dalam C .
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Mencipta Tatasusunan Dua Dimensi Bersaiz Dinamik dalam C Berdasarkan Input Pengguna?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!