Apakah Array Dinamik?
Array dinamik hampir sama dengan susunan biasa, tetapi ukurannya dapat diubah semasa program dijalankan. Elemen DynamArray menempati blok memori yang bersebelahan.
Setelah array dibuat, ukurannya tidak dapat diubah. Walau bagaimanapun, susunan dinamik berbeza. Susunan dinamik dapat mengembangkan saiznya walaupun sudah diisi.
Semasa membuat array, ia diperuntukkan jumlah memori yang telah ditentukan. Ini tidak berlaku dengan array dinamik kerana ia meningkatkan saiz ingatannya dengan faktor tertentu apabila ada keperluan.
Dalam tutorial C ++ ini, anda akan belajar
- Apakah Array Dinamik?
- Faktor-faktor yang mempengaruhi prestasi Array Dinamik
- Kata Kunci baru
- Memulakan array yang diperuntukkan secara dinamik
- Mengubah saiz Susunan
- Memadamkan Susunan secara Dinamik
Faktor-faktor yang mempengaruhi prestasi Array Dinamik
Ukuran awal array dan faktor pertumbuhannya menentukan prestasinya. Perhatikan perkara berikut:
- Sekiranya susunan mempunyai ukuran yang kecil dan faktor pertumbuhan yang kecil, ia akan terus mengagihkan memori lebih kerap. Ini akan mengurangkan prestasi array.
- Sekiranya array mempunyai ukuran besar dan faktor pertumbuhan yang besar, ia akan mempunyai sebahagian besar memori yang tidak digunakan. Oleh kerana itu, operasi pengubahan saiz mungkin memakan masa lebih lama. Ini akan mengurangkan prestasi array.
Kata Kunci baru
Di C ++, kita dapat membuat array dinamik menggunakan kata kunci baru. Jumlah item yang akan diperuntukkan ditentukan dalam sepasang tanda kurung persegi. Nama jenis harus mendahului ini. Jumlah item yang diminta akan diperuntukkan.
Sintaks:
Kata kunci baru menggunakan sintaks berikut:
pointer_variable = new data_type;
Pointer_variable adalah nama pemboleh ubah penunjuk.
Jenis_ data mestilah jenis data C ++ yang sah.
Kata kunci kemudian mengembalikan penunjuk ke item pertama. Setelah membuat array dinamik, kita dapat menghapusnya menggunakan kata kunci hapus.
Contoh 1:
#includeusing namespace std;int main() {int x, n;cout << "Enter the number of items: << "\n";cin >>n;int *arr = new int(n);cout << "Enter " << n << " items" << endl;for (x = 0; x < n; x++) {cin >> arr[x];}cout << "You entered: ";for (x = 0; x < n; x++) {cout << arr[x] << " ";}return 0;}
Pengeluaran:
Berikut adalah tangkapan skrin kod:
Penjelasan Kod:
- Sertakan fail header iostream ke dalam program kami untuk menggunakan fungsinya.
- Sertakan ruang nama std dalam program kami untuk menggunakan kelasnya tanpa memanggilnya.
- Panggil fungsi utama (). Logik program harus ditambahkan dalam badan fungsi.
- Menyatakan dua pemboleh ubah integer x dan n.
- Cetak beberapa teks pada konsol yang mendorong pengguna memasukkan nilai pemboleh ubah n.
- Baca input pengguna dari papan kekunci dan tetapkan pada pemboleh ubah n.
- Menyatakan array untuk menahan bilangan bulat n dan memberikannya kepada pemboleh ubah penunjuk * arr.
- Cetak mesej yang meminta pengguna memasukkan n jumlah item.
- Gunakan gelung untuk untuk membuat pemboleh ubah gelung x untuk mengulangi item yang dimasukkan oleh pengguna.
- Baca elemen yang dimasukkan oleh pengguna dan simpan dalam array arr.
- Hujung badan gelung untuk.
- Cetak sebilangan teks pada konsol.
- Gunakan loop for untuk membuat pemboleh ubah loop x untuk melakukan iterasi pada item array.
- Cetak nilai yang terdapat dalam larik bernama arr di konsol.
- Hujung badan gelung untuk.
- Program mesti mengembalikan nilai setelah berjaya diselesaikan.
- Akhir badan utama () fungsi.
CATATAN: Dalam contoh di atas, pengguna dibenarkan untuk menentukan ukuran apa pun untuk array semasa masa berjalan. Ini bermaksud ukuran array ditentukan semasa waktu berjalan .
Memulakan array yang diperuntukkan secara dinamik
Sangat mudah untuk memulakan array dinamik hingga 0.
Sintaks:
int *array{ new int[length]{} };
Dalam sintaks di atas, panjang menunjukkan bilangan elemen yang akan ditambahkan pada larik. Oleh kerana kita perlu menginisialisasi array ke 0, ini harus dibiarkan kosong.
Kita boleh memulakan array dinamik menggunakan senarai pemula. Mari buat contoh yang menunjukkan ini.
Contoh 2:
#includeusing namespace std;int main(void) {int x;int *array{ new int[5]{ 10, 7, 15, 3, 11 } };cout << "Array elements: " << endl;for (x = 0; x < 5; x++) {cout << array[x] << endl;}return 0;}
Pengeluaran:
Berikut adalah tangkapan skrin kod:
Penjelasan Kod:
- Sertakan fail header iostream ke dalam program kami untuk menggunakan fungsinya.
- Sertakan ruang nama std dalam program kami untuk menggunakan kelasnya tanpa memanggilnya.
- Panggil fungsi utama (). Logik program harus ditambahkan dalam badan fungsi.
- Menyatakan pemboleh ubah integer bernama x.
- Menyatakan array dinamik yang dinamakan array menggunakan senarai pemula. Susunan akan menahan 5 unsur integer. Perhatikan bahawa kami tidak menggunakan operator antara panjang array dan senarai pemula.
- Cetak sebilangan teks pada konsol. Endl adalah kata kunci C ++ yang bermaksud garis akhir. Ia menggerakkan kursor ke ayat seterusnya.
- Gunakan gelung untuk mengulang elemen array.
- Cetak kandungan larik bernama array pada konsol.
- Hujung badan gelung untuk.
- Program mesti mengembalikan nilai setelah berjaya diselesaikan.
- Akhir badan utama () fungsi.
Mengubah saiz Susunan
Panjang array dinamik ditetapkan semasa masa peruntukan.
Namun, C ++ tidak mempunyai mekanisme bawaan untuk mengubah ukuran array setelah ia diperuntukkan.
Namun, anda dapat mengatasi cabaran ini dengan memperuntukkan array baru secara dinamis, menyalin elemen, kemudian menghapus array lama.
Perhatikan: bahawa teknik ini terdedah kepada kesalahan, oleh itu, cubalah menghindarinya.
Memadamkan Susunan secara Dinamik
Array dinamik harus dihapus dari memori komputer setelah tujuannya terpenuhi. Penyataan hapus dapat membantu anda mencapai ini. Ruang memori yang dilepaskan kemudian dapat digunakan untuk menyimpan satu set data yang lain. Walau bagaimanapun, walaupun anda tidak menghapus array dinamik dari memori komputer, ia akan dihapus secara automatik setelah program berakhir.
Catatan:
Untuk menghapus array dinamik dari memori komputer, anda harus menggunakan delete [], bukan delete. [] Memerintahkan CPU untuk menghapus beberapa pemboleh ubah daripada satu pemboleh ubah. Penggunaan delete dan bukannya delete [] ketika berhadapan dengan array dinamik boleh mengakibatkan masalah. Contoh masalah seperti kebocoran memori, kerosakan data, kerosakan, dll.
Contoh 3:
#includeusing namespace std;int main() {int x, n;cout << "How many numbers will you type?" << "\n";cin >>n;int *arr = new int(n);cout << "Enter " << n << " numbers" << endl;for (x = 0; x < n; x++) {cin >> arr[x];}cout << "You typed: ";for (x = 0; x < n; x++) {cout << arr[x] << " ";}cout << endl;delete [] arr;return 0;}
Pengeluaran:
Berikut adalah tangkapan skrin kod:
Penjelasan Kod:
- Sertakan fail header iostream dalam program kami untuk menggunakan fungsinya.
- Sertakan ruang nama std dalam program kami untuk menggunakan kelasnya tanpa memanggilnya.
- Panggil fungsi utama (). Logik program harus ditambahkan dalam badan fungsi.
- Menyatakan dua pemboleh ubah x dan n dari jenis data integer.
- Cetak sebilangan teks pada konsol. Teks akan meminta pengguna menyatakan bilangan nombor yang akan mereka masukkan.
- Baca input pengguna dari papan kekunci. Nilai input akan diberikan kepada pemboleh ubah n.
- Menyatakan pemboleh ubah penunjuk * arr. Susunan array akan menyimpan beberapa memori untuk menyimpan jumlah bilangan bulat n.
- Cetak mesej di konsol yang meminta pengguna memasukkan nombor n.
- Buat gelung a dan pemboleh ubah gelung x untuk mengulangi nombor yang dimasukkan oleh pengguna.
- Baca nombor yang dimasukkan oleh pengguna dan simpan di dalam array array.
- Hujung badan gelung untuk.
- Cetak sebilangan teks pada konsol.
- Gunakan a untuk gelung dan pemboleh ubah gelung x untuk mengulangi kandungan array arr.
- Cetak nilai array pada konsol.
- Hujung badan gelung untuk.
- Cetak baris kosong di konsol.
- Kosongkan memori array.
- Program akan mengembalikan nilai apabila berjaya diselesaikan.
- Akhir badan utama () fungsi.
Ringkasan:
- Susunan biasa mempunyai ukuran tetap. Anda tidak dapat mengubah ukurannya setelah dinyatakan.
- Dengan jenis susunan ini, ukuran memori ditentukan semasa masa penyusunan.
- Susunan dinamik berbeza. Saiz mereka boleh diubah semasa menjalankan.
- Dalam tatasusunan dinamik, ukuran ditentukan semasa menjalankan.
- Susunan dinamik dalam C ++ dinyatakan menggunakan kata kunci baru.
- Kami menggunakan tanda kurung persegi untuk menentukan jumlah item yang akan disimpan dalam array dinamik.
- Setelah selesai dengan array, kita dapat mengosongkan memori menggunakan operator hapus.
- Gunakan operator hapus dengan [] untuk membebaskan memori semua elemen array.
- Padam tanpa [] membebaskan memori hanya satu elemen.
- Tidak ada mekanisme terbina dalam untuk mengubah saiz array C ++.
- Untuk menginisialisasi array menggunakan senarai pemula, kami tidak menggunakan operator .