Pola Iterator
Termasuk bagian Pemrograman Berorientasi Objek dalam perjalanan C di Coddy. Pelajaran 56 dari 61.
Pola Iterator menyediakan cara untuk mengakses elemen-elemen dalam koleksi secara berurutan tanpa menampilkan struktur dasarnya. Alih-alih memberikan akses langsung ke array kepada pengguna, kamu memberikan mereka sebuah object yang tahu cara menelusuri data satu elemen setiap kali.
Iterator biasanya membutuhkan dua informasi: referensi ke koleksi dan posisi saat ini. Di C, kita membuat struct untuk menyimpan status ini:
typedef struct {
int* data; // pointer ke array
int size; // jumlah total elemen
int current; // posisi saat ini
} IntIterator;Iterator menyediakan dua fungsi utama. has_next() memeriksa apakah masih ada elemen yang dapat dibaca, dan next() mengembalikan elemen saat ini lalu memajukan posisi:
int has_next(IntIterator* it) {
return it->current < it->size;
}
int next(IntIterator* it) {
return it->data[it->current++];
}Menggunakan iterator terlihat rapi dan menyembunyikan detail array:
IntIterator it = create_iterator(numbers, 5);
while (has_next(&it)) {
printf("%d\n", next(&it));
}Pemanggil tidak perlu tahu bahwa numbers adalah array atau cara kerja pengindeksan. Abstraksi ini memudahkan kamu mengubah struktur data yang mendasarinya nanti, misalnya dari array menjadi linked list, tanpa mengubah kode yang menggunakan iterator.
Tantangan
MudahMari buat iterator NumberList: abstraksi yang rapi sehingga kamu bisa menelusuri kumpulan bilangan bulat tanpa mengungkap struktur array yang mendasarinya.
Kamu akan mengatur kodemu dalam tiga file:
iterator.h: Definisikan structIntIteratoryang menyimpan pointer ke array bilangan bulat, ukuran total kumpulan, dan posisi saat ini. Deklarasikan tiga fungsi:create_iterator(menerima pointer array dan ukuran, lalu mengembalikan iterator yang telah diinisialisasi),has_next(memeriksa apakah masih ada elemen), dannext(mengembalikan elemen saat ini lalu memajukan posisi). Jangan lupa guard untuk mencegah penyertaan berulang!iterator.c: Implementasikan fungsi-fungsi iterator. Fungsicreate_iteratorharus mengembalikanIntIteratorsebagai nilai dengan posisi saat ini diatur ke 0. Fungsihas_nextmengembalikan 1 jika masih ada elemen untuk dibaca, dan 0 jika tidak. Fungsinextmengembalikan elemen pada posisi saat ini, lalu menambah posisi.main.c: Baca jumlah elemen, lalu baca setiap nilai bilangan bulat ke dalam array. Buat iterator untuk array ini, lalu gunakan perulangan while denganhas_nextdannextuntuk menelusuri dan mencetak setiap elemen pada barisnya sendiri.
Programmu akan menerima:
- Jumlah elemen dalam array
- Setiap nilai bilangan bulat pada baris terpisah
Gunakan pola iterator untuk mencetak semua elemen: jangan mengakses indeks array secara langsung dalam perulangan penelusuranmu!
Contoh output saat inputnya adalah 4, lalu 10, 20, 30, 40:
10
20
30
40Contoh output saat inputnya adalah 3, lalu -5, 0, 100:
-5
0
100Contoh output saat inputnya adalah 1, lalu 42:
42Iterator menyembunyikan cara penyimpanan data. Perulangan utama cukup menanyakan "apakah masih ada?" dan "berikan yang berikutnya" tanpa mengetahui apa pun tentang indeks array atau tata letak memori.
Coba sendiri
#include <stdio.h>
#include "iterator.h"
int main() {
int n;
scanf("%d", &n);
int arr[n];
// TODO: Baca n nilai bilangan bulat ke dalam array
for (int i = 0; i < n; i++) {
scanf("%d", &arr[i]);
}
// TODO: Buat iterator untuk array
// TODO: Gunakan while loop dengan has_next dan next untuk menelusuri
// dan cetak setiap elemen pada baris tersendiri
// JANGAN gunakan pengindeksan array secara langsung dalam loop penelusuranmu!
return 0;
}
Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.
Semua pelajaran di Pemrograman Berorientasi Objek
1Dasar-Dasar Pemrograman Modular
file headerProteksi includefile sumberFungsi StatisRingkasan: Kalkulator Modular4Enkapsulasi
Konsep Opaque PointerMendefinisikan Opaque StructGetter dan SetterValidasi pada SetterUlasan: Kotak Rahasia2Object dan method
Struct sebagai objectPointer 'self'Konsistensi constPointer vs nilaiMethod pembantuRangkuman: Pengelola Point5Proyek: Akun Bank Sederhana
Penyiapan ProyekImplementasi Akun3Siklus Hidup object
Pola KonstruktorPola DestruktorInisialisasi StackSalinan MendalamRangkuman: Pembungkus string6Pewarisan melalui Komposisi
Penyematan StructAturan Anggota PertamaMengakses Anggota ParentUpcastingRekap: Hierarki Bentuk9Proyek: Penggambar Bentuk
Ringkasan ProyekImplementasi LingkaranImplementasi Persegi PanjangPenggunaan PolimorfismeWadah BentukLatihan sendiri: Compiler C online