Rumah > pembangunan bahagian belakang > C++ > Bagaimanakah Saya Boleh Membuat Jenis Tersuai Saya Berfungsi dengan Berasaskan Julat untuk Gelung dalam C ?

Bagaimanakah Saya Boleh Membuat Jenis Tersuai Saya Berfungsi dengan Berasaskan Julat untuk Gelung dalam C ?

DDD
Lepaskan: 2024-12-19 22:33:16
asal
774 orang telah melayarinya

How Can I Make My Custom Types Work with Range-Based for Loops in C  ?

Menjadikan Jenis Tersuai Serasi dengan Berasaskan Julat untuk Gelung

Untuk mendayakan penggunaan berdasarkan julat untuk gelung dengan jenis data tersuai, anda mempunyai dua pilihan utama:

  • Sediakan begin() dan end() Ahli Fungsi:
    Laksanakan fungsi ahli begin() dan end() dalam jenis tersuai anda yang mengembalikan iterator.
  • Buat Free begin() dan end() Fungsi:
    Tentukan fungsi percuma bernama begin() dan end() dalam ruang nama yang sama dengan jenis tersuai anda, mengambil jenis anda sebagai hujah dan kembalikan iterator.

Pertimbangan Ruang Nama:

Jika jenis tersuai anda berada dalam ruang nama, seperti xml, anda mesti mengisytiharkan begin() dan end() berfungsi dalam ruang nama itu juga. Tiada keperluan untuk menentukan sama ada xml::begin() atau std::begin().

Keperluan Kaedah:

Nilai mula/akhir kembali bukan diperlukan untuk menjadi iterator sebenar. Walau bagaimanapun, mereka mesti mematuhi keperluan khusus:

  • Sokongan pra-kenaikan ( )
  • Sediakan ungkapan permulaan yang sah
  • Laksanakan binari tidak sama (!=) untuk boolean perbandingan
  • Dedahkan orang ramai pemusnah

Berasaskan Julat untuk Peluasan Gelung:

Berasaskan julat untuk sintaks gelung, untuk (range_declaration : range_expression), berkembang kepada pseudokod berikut:

{
  auto &range = range_expression;
  for (auto begin = begin_expr, end = end_expr; begin != end; ++begin) {
    range_declaration = *begin;
    loop_statement
  }
}
Salin selepas log masuk

C 17 Decoupled End Jenis:

Dalam C 17, pseudokod dikembangkan gelung berasaskan julat ditukar kepada:

{
  auto &range = range_expression;
  auto begin = begin_expr;
  auto end = end_expr;
  for (; begin != end; ++begin) {
    range_declaration = *begin;
    loop_statement
  }
}
Salin selepas log masuk

Perubahan ini membenarkan jenis lelaran akhir berbeza daripada jenis lelaran permulaan. Ia membolehkan penggunaan iterator "sentinel" yang hanya menyokong perbandingan ketidaksamaan dengan jenis iterator mula.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Membuat Jenis Tersuai Saya Berfungsi dengan Berasaskan Julat untuk Gelung dalam C ?. 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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan