Rumah > pembangunan bahagian belakang > C++ > Bagaimanakah Saya Boleh Mencipta Tatasusunan Dua Dimensi Bersaiz Dinamik dalam C Berdasarkan Input Pengguna?

Bagaimanakah Saya Boleh Mencipta Tatasusunan Dua Dimensi Bersaiz Dinamik dalam C Berdasarkan Input Pengguna?

Susan Sarandon
Lepaskan: 2024-11-29 04:08:08
asal
785 orang telah melayarinya

How Can I Create Dynamically Sized Two-Dimensional Arrays in C   Based on User Input?

Susun Dua Dimensi Bersaiz Dinamik Berdasarkan Input Pengguna

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.

Menggunakan STL Vector of Vectors

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

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.

Menggunakan Kelas Pembungkus Matriks

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

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.

Operator Subskrip Tatasusunan Melebihi

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

Menggunakan pendekatan ini, kita boleh mengakses elemen matriks melalui:

T& element = matrix[std::make_pair(row, column)];
Salin selepas log masuk

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!

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