Apa itu Dynamic Array?
Sebuah array dinamis sangat mirip dengan array biasa, tetapi ukurannya dapat diubah selama program berjalan. 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 diisi.
Selama pembuatan array, itu dialokasikan sejumlah memori yang telah ditentukan. Ini tidak terjadi dengan array dinamis karena ia meningkatkan ukuran memorinya dengan faktor tertentu ketika ada kebutuhan.
Dalam tutorial C ++ ini, Anda akan belajar
- Apa itu Dynamic Array?
- Faktor yang memengaruhi kinerja Array Dinamis
- Kata kunci baru
- Menginisialisasi array yang dialokasikan secara dinamis
- Mengubah Ukuran Array
- Menghapus Array Secara Dinamis
Faktor yang memengaruhi kinerja Array Dinamis
Ukuran awal larik dan faktor pertumbuhannya menentukan kinerjanya. Perhatikan poin-poin berikut:
- Jika sebuah array memiliki ukuran kecil dan faktor pertumbuhan kecil, itu akan terus mengalokasikan kembali memori lebih sering. Ini akan mengurangi kinerja larik.
- Jika sebuah array memiliki ukuran yang besar dan faktor pertumbuhan yang besar, ia akan memiliki sejumlah besar memori yang tidak terpakai. Karena itu, operasi pengubahan ukuran mungkin membutuhkan waktu lebih lama. Ini akan mengurangi kinerja larik.
Kata kunci baru
Di C ++, kita dapat membuat array dinamis menggunakan kata kunci baru. 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 mengambil sintaks berikut:
pointer_variable = new data_type;
The pointer_variable adalah nama dari variabel pointer.
Data_type harus merupakan tipe data C ++ yang valid.
Kata kunci kemudian mengembalikan penunjuk ke item pertama. Setelah membuat array dinamis, kita dapat menghapusnya menggunakan kata kunci delete.
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;}
Keluaran:
Berikut tangkapan layar kodenya:
Penjelasan Kode:
- Sertakan file header iostream ke 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 tubuh fungsi.
- Deklarasikan dua variabel bilangan bulat x dan n.
- Cetak beberapa teks di konsol yang meminta pengguna memasukkan nilai variabel n.
- Baca masukan pengguna dari keyboard dan tetapkan ke variabel n.
- Deklarasikan sebuah array untuk menampung total n bilangan bulat dan menugaskannya ke variabel pointer * arr.
- Cetak pesan yang meminta pengguna memasukkan n jumlah item.
- Gunakan for loop untuk membuat variabel loop x untuk mengulang item yang dimasukkan oleh pengguna.
- Membaca elemen yang dimasukkan oleh pengguna dan menyimpannya dalam array arr.
- Akhir badan loop for.
- Cetak beberapa teks di konsol.
- Gunakan perulangan for untuk membuat variabel perulangan x untuk melakukan iterasi pada item larik.
- Cetak nilai yang terkandung dalam array bernama arr di konsol.
- Akhir badan loop for.
- Program harus mengembalikan nilai setelah berhasil diselesaikan.
- Akhir badan fungsi main ().
CATATAN: Dalam contoh di atas, pengguna diizinkan untuk menentukan ukuran apa pun untuk larik selama waktu proses. Ini berarti ukuran array ditentukan selama runtime .
Menginisialisasi array yang dialokasikan secara dinamis
Sangat mudah untuk menginisialisasi array dinamis ke 0.
Sintaksis:
int *array{ new int[length]{} };
Dalam sintaks di atas, panjangnya menunjukkan jumlah elemen yang akan ditambahkan ke array. Karena kita perlu menginisialisasi array ke 0, ini harus dikosongkan.
Kita dapat menginisialisasi array dinamis menggunakan daftar penginisialisasi. Mari buat contoh yang mendemonstrasikan 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;}
Keluaran:
Berikut tangkapan layar kodenya:
Penjelasan Kode:
- Sertakan file header iostream ke 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 tubuh fungsi.
- Deklarasikan variabel integer bernama x.
- Deklarasikan larik dinamis bernama larik menggunakan daftar penginisialisasi. Array akan menampung 5 elemen integer. Perhatikan bahwa kami belum menggunakan operator antara panjang array dan daftar penginisialisasi.
- Cetak beberapa teks di konsol. Endl adalah kata kunci C ++ yang berarti garis akhir. Ini memindahkan kursor ke kalimat berikutnya.
- Gunakan for loop untuk mengulang elemen array.
- Cetak konten dari array bernama array di konsol.
- Akhir badan loop for.
- Program harus mengembalikan nilai setelah berhasil diselesaikan.
- Akhir badan fungsi main ().
Mengubah Ukuran Array
Panjang larik 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 rawan kesalahan, oleh karena itu cobalah untuk menghindarinya.
Menghapus Array Secara Dinamis
Sebuah array dinamis harus dihapus dari memori komputer setelah tujuannya terpenuhi. Pernyataan delete dapat membantu Anda mencapai ini. Ruang memori yang dilepaskan kemudian dapat digunakan untuk menyimpan kumpulan data lainnya. Namun, bahkan jika Anda tidak menghapus array dinamis dari memori komputer, itu akan dihapus secara otomatis setelah program dihentikan.
catatan:
Untuk menghapus array dinamis dari memori komputer, Anda harus menggunakan delete [], daripada delete. [] Memerintahkan CPU untuk menghapus beberapa variabel daripada satu variabel. Penggunaan delete daripada delete [] saat berhadapan dengan array dinamis dapat menyebabkan masalah. Contoh masalah tersebut termasuk kebocoran memori, kerusakan data, crash, 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;}
Keluaran:
Berikut 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 tubuh fungsi.
- Deklarasikan dua variabel x dan n dari tipe data integer.
- Cetak beberapa teks di konsol. Teks tersebut akan meminta pengguna untuk menyatakan jumlah angka yang akan mereka masukkan.
- Baca masukan pengguna dari keyboard. Nilai masukan akan diberikan ke variabel n.
- Deklarasikan variabel pointer * arr. Array arr akan menyimpan beberapa memori untuk menyimpan total n bilangan bulat.
- Cetak pesan di konsol yang meminta pengguna memasukkan n nomor.
- Buat loop for dan variabel loop x untuk mengulang angka yang dimasukkan oleh pengguna.
- Membaca angka yang dimasukkan oleh pengguna dan menyimpannya dalam array arr.
- Akhir badan loop for.
- Cetak beberapa teks di konsol.
- Gunakan for loop dan variabel loop x untuk melakukan iterasi terhadap konten array arr.
- Cetak nilai dari array arr di konsol.
- Akhir badan loop for.
- Cetak baris kosong di konsol.
- Kosongkan memori dari array arr.
- Program akan mengembalikan nilai ketika selesai dengan sukses.
- Akhir badan fungsi main ().
Ringkasan:
- Array biasa memiliki ukuran tetap. Anda tidak dapat mengubah ukurannya setelah dideklarasikan.
- Dengan tipe array ini, ukuran memori ditentukan selama waktu kompilasi.
- Array dinamis berbeda. Ukurannya dapat diubah selama runtime.
- Dalam larik dinamis, ukurannya ditentukan selama runtime.
- Array dinamis dalam C ++ dideklarasikan menggunakan kata kunci baru.
- Kami menggunakan tanda kurung siku untuk menentukan jumlah item yang akan disimpan dalam larik dinamis.
- Setelah selesai dengan array, kita dapat mengosongkan memori menggunakan operator delete.
- Gunakan operator delete dengan [] untuk membebaskan memori dari semua elemen array.
- Penghapusan tanpa [] membebaskan memori dari hanya satu elemen.
- Tidak ada mekanisme bawaan untuk mengubah ukuran array C ++.
- Untuk menginisialisasi array menggunakan penginisialisasi daftar, kami tidak menggunakan operator .