Rumah > Artikel > pembangunan bahagian belakang > Bagaimanakah Iterator Tersuai Boleh Memudahkan Lelaran Melalui Bekas Bersarang?
Membalas melalui bekas bersarang selalunya boleh menjadi tugas yang membosankan dan mudah ralat. Untuk memudahkan proses ini, kami meneroka konsep lelaran "meratakan", yang membolehkan kami menganggap hierarki bekas sebagai urutan tunggal yang diratakan.
Andaikan kita mempunyai satu set vektor yang mengandungi integer, dan kami ingin mengulanginya sebagai satu senarai bersebelahan. Std mudah::vector
Untuk menangani isu ini, kami boleh mencipta lelaran tersuai, meratakan_iterator, yang melelaran melalui bekas bersarang secara berurutan. Peulang ini:
Leter_flattening dilaksanakan seperti berikut:
template <typename OuterIterator> class flattening_iterator { public: // ... iterator category, value type, etc. flattening_iterator(outer_iterator it) : outer_it_(it), outer_end_(it) { } flattening_iterator(outer_iterator it, outer_iterator end) : outer_it_(it), outer_end_(end) { advance_past_empty_inner_containers(); } // ... operators for comparison, dereferencing, and advancement private: void advance_past_empty_inner_containers() { // Advance until we find a non-empty innermost container while (outer_it_ != outer_end_ && inner_it_ == outer_it_->end()) { ++outer_it_; if (outer_it_ != outer_end_) inner_it_ = outer_it_->begin(); } } outer_iterator outer_it_; outer_iterator outer_end_; inner_iterator inner_it_; };
Kita boleh menggunakan leter_flattening untuk meratakan bekas bersarang seperti berikut:
std::unordered_set<std::vector<int>> s; s.insert({}); s.insert({1,2,3,4,5}); s.insert({6,7,8}); s.insert({9,10,11,12}); // Create a flattening iterator and iterate over the flattened set for (auto it = flatten(s.begin()); it != s.end(); ++it) { std::cout << *it << endl; }
Ini akan mengeluarkan senarai diratakan semua integer dalam bekas bersarang:
1 2 3 4 5 6 7 8 9 10 11 12
Leter_flattening menyediakan cara yang mudah dan berkesan untuk mengulangi bekas bersarang sebagai satu jujukan yang diratakan. Ini memudahkan kod dan menghapuskan keperluan untuk struktur gelung bersarang yang kompleks atau navigasi manual melalui hierarki bersarang.
Atas ialah kandungan terperinci Bagaimanakah Iterator Tersuai Boleh Memudahkan Lelaran Melalui Bekas Bersarang?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!