C++ Alokasi Dinamis Array dengan Contoh
Apa itu Array Dinamis?
Array dinamis sangat mirip dengan array biasa, namun ukurannya dapat diubah selama runtime program. Elemen DynamArray menempati blok memori yang berdekatan.
Setelah array dibuat, ukurannya tidak dapat diubah. Namun, array dinamis berbeda. Array dinamis dapat memperluas ukurannya bahkan setelah terisi.
Selama pembuatan array, sejumlah memori dialokasikan ke dalamnya. Hal ini tidak terjadi pada array dinamis karena ukuran memorinya akan bertambah dengan faktor tertentu ketika diperlukan.
Faktor-faktor yang mempengaruhi kinerja Array Dinamis
Ukuran awal array dan faktor pertumbuhannya menentukan kinerjanya. Perhatikan poin-poin berikut:
- Jika sebuah array memiliki ukuran yang kecil dan faktor pertumbuhan yang kecil, array tersebut akan terus melakukan realokasi memori lebih sering. Hal ini akan mengurangi kinerja array.
- Jika sebuah array memiliki ukuran yang besar dan faktor pertumbuhan yang besar, maka array tersebut akan memiliki sejumlah besar memori yang tidak terpakai. Oleh karena itu, operasi pengubahan ukuran mungkin memerlukan waktu lebih lama. Hal ini akan mengurangi kinerja array.
Kata Kunci baru
In C++, kita dapat membuat array dinamis menggunakan kata kunci new. Jumlah item yang akan dialokasikan ditentukan dalam sepasang tanda kurung siku. Nama tipe harus mendahului ini. Jumlah item yang diminta akan dialokasikan.
Sintaksis
Kata kunci baru memiliki sintaksis sebagai berikut:
pointer_variable = new data_type;
Pointer_variable adalah nama dari variabel penunjuk.
data_type harus valid C++ tipe data.
Kata kunci kemudian mengembalikan penunjuk ke item pertama. Setelah membuat array dinamis, kita dapat menghapusnya menggunakan kata kunci delete.
Contoh 1:
#include<iostream> using 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; }
Keluaran:
Berikut ini tangkapan layar kodenya:
Penjelasan Kode:
- Sertakan file header iostream ke dalam program kami untuk menggunakannya fungsi.
- Sertakan namespace std dalam program kita untuk menggunakan kelasnya tanpa memanggilnya.
- Panggil fungsi main(). Logika program harus ditambahkan di dalam isi fungsi.
- Deklarasikan dua variabel integer x dan n.
- Cetak beberapa teks di konsol yang meminta pengguna memasukkan nilai variabel n.
- Baca input pengguna dari keyboard dan tetapkan ke variabel n.
- Deklarasikan array untuk menampung total n bilangan bulat dan menugaskannya ke variabel penunjuk *arr.
- Cetak pesan yang meminta pengguna untuk memasukkan n jumlah item.
- Gunakan perulangan for untuk membuat variabel perulangan x untuk mengulangi item yang dimasukkan oleh pengguna.
- Membaca elemen yang dimasukkan oleh pengguna dan menyimpannya dalam array arr.
- Ujung tubuh untuk loop.
- Cetak beberapa teks di konsol.
- Gunakan perulangan for untuk membuat variabel perulangan x untuk melakukan iterasi pada item array.
- Cetak nilai yang terdapat dalam array bernama arr di konsol.
- Akhir dari badan perulangan for.
- Program harus mengembalikan nilai setelah berhasil diselesaikan.
- Akhir dari isi fungsi main().
CATATAN: Dalam contoh di atas, pengguna diperbolehkan menentukan ukuran array apa pun selama run time. Ini berarti ukuran array ditentukan saat runtime.
Menginisialisasi array yang dialokasikan secara dinamis
Sangat mudah untuk menginisialisasi array dinamis ke 0.
sintaks:
int *array{ new int[length]{} };
Dalam sintaks di atas, panjang menunjukkan jumlah elemen yang akan ditambahkan ke array. Karena kita perlu menginisialisasi array ke 0, ini harus dibiarkan kosong.
Kita dapat menginisialisasi array dinamis menggunakan daftar penginisialisasi. Mari kita buat contoh yang menunjukkan hal ini.
Contoh 2:
#include <iostream> using 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; }
Keluaran:
Berikut ini tangkapan layar kodenya:
Penjelasan Kode:
- Sertakan file header iostream ke dalam program kami untuk menggunakan fungsinya.
- Sertakan namespace std dalam program kami untuk menggunakan kelasnya tanpa memanggilnya.
- Panggil fungsi main(). Logika program harus ditambahkan di dalam isi fungsi.
- Deklarasikan variabel integer bernama x.
- Deklarasikan array dinamis bernama array menggunakan daftar penginisialisasi. Array akan menampung 5 elemen bilangan bulat. Perhatikan bahwa kami tidak menggunakan operator “=” antara panjang array dan daftar penginisialisasi.
- Cetak beberapa teks di konsol. Ujungnya adalah a C++ kata kunci yang berarti garis akhir. Ini memindahkan kursor ke kalimat berikutnya.
- Gunakan perulangan for untuk mengulangi elemen array.
- Cetak isi array bernama array di konsol.
- Akhir dari badan perulangan for.
- Program harus mengembalikan nilai setelah berhasil diselesaikan.
- Akhir dari isi fungsi main().
Mengubah Ukuran Array
Panjang array dinamis diatur selama waktu alokasi.
Namun, C++ tidak memiliki mekanisme bawaan untuk mengubah ukuran array setelah dialokasikan.
Namun, Anda dapat mengatasi tantangan ini dengan mengalokasikan array baru secara dinamis, menyalin elemen, lalu menghapus array lama.
Catatan: bahwa teknik ini rentan terhadap kesalahan, oleh karena itu, cobalah untuk menghindarinya.
Menghapus Array Secara Dinamis
Array dinamis harus dihapus dari memori komputer setelah tujuannya terpenuhi. Pernyataan delete dapat membantu Anda mencapai hal ini. Ruang memori yang dibebaskan kemudian dapat digunakan untuk menampung kumpulan data lainnya. Namun, meskipun Anda tidak menghapus array dinamis dari memori komputer, array tersebut akan terhapus secara otomatis setelah program dihentikan.
Catatan:
Untuk menghapus array dinamis dari memori komputer, Anda harus menggunakan delete[], bukan delete. [] memerintahkan CPU untuk menghapus beberapa variabel, bukan satu variabel. Penggunaan delete alih-alih delete[] ketika berhadapan dengan array dinamis dapat menimbulkan masalah. Contoh masalah tersebut termasuk kebocoran memori, kerusakan data, kerusakan, dll.
Contoh 3:
#include<iostream> using 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; }
Keluaran:
Berikut ini tangkapan layar kodenya:
Penjelasan Kode:
- Sertakan file header iostream dalam program kami untuk menggunakan fungsinya.
- Sertakan namespace std dalam program kita untuk menggunakan kelasnya tanpa memanggilnya.
- Panggil fungsi main(). Logika program harus ditambahkan di dalam isi fungsi.
- Deklarasikan dua variabel x dan n bertipe data integer.
- Cetak beberapa teks di konsol. Teks tersebut akan meminta pengguna untuk menyebutkan jumlah angka yang akan dimasukkan.
- Membaca input pengguna dari keyboard. Nilai input akan ditetapkan ke variabel n.
- Deklarasikan variabel penunjuk *arr. Array arr akan mencadangkan sejumlah memori untuk menyimpan total n bilangan bulat.
- Cetak pesan di konsol yang meminta pengguna memasukkan n nomor.
- Buat perulangan for dan variabel perulangan x untuk mengulangi angka yang dimasukkan oleh pengguna.
- Baca angka-angka yang dimasukkan oleh pengguna dan simpan dalam array arr.
- Akhir dari badan perulangan for.
- Cetak beberapa teks di konsol.
- Gunakan perulangan for dan variabel perulangan x untuk mengulangi isi array arr.
- Cetak nilai array arr di konsol.
- Akhir dari badan perulangan for.
- Cetak baris kosong di konsol.
- Kosongkan memori array arr.
- Program akan mengembalikan nilai ketika berhasil diselesaikan.
- Akhir dari isi fungsi main().
Ringkasan
- Array reguler memiliki ukuran tetap. Anda tidak dapat mengubah ukurannya setelah dinyatakan.
- Dengan jenis array ini, ukuran memori ditentukan selama waktu kompilasi.
- Array dinamis berbeda. Ukurannya dapat diubah selama runtime.
- Dalam array dinamis, ukurannya ditentukan saat runtime.
- Array dinamis di C++ dideklarasikan menggunakan kata kunci baru.
- Kami menggunakan tanda kurung siku untuk menentukan jumlah item yang akan disimpan dalam array dinamis.
- Setelah selesai dengan array, kita dapat mengosongkan memori menggunakan operator delete.
- Gunakan operator hapus dengan [] untuk mengosongkan memori semua elemen array.
- Penghapusan tanpa [] membebaskan memori hanya satu elemen.
- Tidak ada mekanisme bawaan untuk mengubah ukuran C++ array.
- Untuk menginisialisasi array menggunakan penginisialisasi daftar, kami tidak menggunakan operator “=”.