Menggunakan "Berasaskan Julat untuk Gelung" dengan Jenis Tersuai
Penyatuan Jenis Tersuai
Untuk mendayakan "berasaskan julat untuk gelung" pada jenis tersuai anda, anda boleh melaksanakan berikut:
Ruang nama Pertimbangan
Keperluan Nilai Pulangan
Objek yang dikembalikan oleh begin() dan end() tidak perlu menjadi iterator sebenar. Mereka mesti memenuhi keperluan berikut:
Jenis Terpisah
Dalam C 17, jenis mula dan akhir telah dipisahkan. Ini membolehkan iterator akhir mempunyai jenis yang berbeza daripada iterator permulaan. Ini berguna untuk iterator "sentinel" yang hanya menyokong != dengan jenis lelaran mula, membolehkan lelaran yang cekap ke atas penimbal aksara yang ditamatkan nol.
Contoh Sambungan Pustaka
Pertimbangkan jenis perpustakaan beberapa_struct_you_do_not_control yang mengandungi vektor integer tetapi tidak mempunyai kaedah begin() dan end().
namespace library_ns { struct some_struct_you_do_not_control { std::vector<int> data; }; }
Untuk membuat jenis ini boleh diubah, anda boleh menambah fungsi berikut pada library_ns ruang nama:
namespace library_ns { int* begin(some_struct_you_do_not_control& x){ return x.data.data(); } int* end(some_struct_you_do_not_control& x){ return x.data.data()+x.data.size(); } int const* cbegin(some_struct_you_do_not_control const& x){ return x.data.data(); } int* cend(some_struct_you_do_not_control const& x){ return x.data.data()+x.data.size(); } int const* begin(some_struct_you_do_not_control const& x){ return cbegin(x); } int const* end(some_struct_you_do_not_control const& x){ return cend(x); } }
Kini, anda boleh lelaran ke atas vektor menggunakan berasaskan julat untuk gelung:
library_ns::some_struct_you_do_not_control s; for (int i : s) { // ... }
Contoh Jenis Tersuai
Untuk jenis tersuai yang anda kawal, anda boleh mentakrifkan Kaedah begin() dan end() terus dalam jenis:
struct egg_carton { std::vector<egg> eggs; auto begin() { return eggs.begin(); } auto end() { return eggs.end(); } // ... };
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Jadikan Jenis Tersuai Saya Boleh Diterbalikkan Menggunakan Berasaskan Julat Untuk Gelung dalam C ?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!