Rumah > pembangunan bahagian belakang > C++ > Bagaimanakah Saya Boleh Jadikan Jenis C Tersuai Saya Boleh Diterbalikkan Menggunakan Berasaskan Julat Untuk Gelung?

Bagaimanakah Saya Boleh Jadikan Jenis C Tersuai Saya Boleh Diterbalikkan Menggunakan Berasaskan Julat Untuk Gelung?

Linda Hamilton
Lepaskan: 2024-12-23 22:03:09
asal
604 orang telah melayarinya

How Can I Make My Custom C   Types Iterable Using Range-Based For Loops?

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!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan