Pemudahan Lelaran dengan Jenis Tersuai
Dalam C 11, pengenalan berasaskan julat untuk gelung telah memudahkan proses lelaran ke atas jujukan. Gelung ini mengikut corak piawai:
for (Type& v : a) { ... } // equivalent to traditional loop below
for (auto iv = begin(a); iv != end(a); ++iv) {
Type& v = *iv;
...
}
Salin selepas log masuk
Anda boleh melanjutkan fungsi ini kepada jenis tersuai anda, membenarkannya digunakan dalam gelung berasaskan julat, dengan mengikut garis panduan ini:
Pendekatan 1 : Pengisytiharan Fungsi Ahli
- Tentukan begin() dan end() fungsi ahli dalam jenis X anda yang mengembalikan objek dengan tingkah laku seperti iterator.
Pendekatan 2: Invokasi Fungsi Percuma
- Buat fungsi percuma begin(X&) dan end(X&) dalam ruang nama yang sama dengan jenis X anda, sekali lagi mengembalikan objek seperti iterator.
Fungsi ini akan menyediakan permulaan yang diperlukan (begin()) dan penamatan (end()) mata untuk gelung berasaskan julat.
Keperluan Nilai Pulangan Fungsi
Objek yang dikembalikan oleh begin() dan end() tidak perlu menjadi iterator sebenar. Walau bagaimanapun, mereka mesti memenuhi keperluan berikut:
- Lebih beban sebelum menambah objek
- Pastikan ungkapan permulaan yang sah
- Sokongan binari != untuk konteks boolean
- Laksanakan unary * untuk mengembalikan nilai yang boleh diberikan kepada gelung pembolehubah
- Sediakan pemusnah awam
Pertimbangan Tambahan
- Jika jenis tersuai anda tergolong dalam ruang nama xml, takrifkan xml::begin() untuk mengelakkan potensi konflik dengan std::begin().
- Semakan C masa hadapan mungkin pisahkan jenis begin() dan end(), membenarkan penilaian "lazy-end".
- C 17 memperkenalkan jenis baharu, null_sentinal_t, yang memudahkan gelung berasaskan julat ke atas penimbal aksara yang ditamatkan nol.
- Gelung berasaskan julat menggunakan pembolehubah sementara yang disimpan dalam auto&& rujukan, yang bermaksud beban mula() dan tamat() anda tidak boleh mengesan jika ia beroperasi secara sementara.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Jadikan Jenis C Tersuai Saya Boleh Diterbalikkan Menggunakan Berasaskan Julat Untuk Gelung?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!