Rumah >pembangunan bahagian belakang >C++ >Bagaimanakah Kami Boleh Meratakan Iterator Bersarang dalam C untuk Lelaran Berjujukan Lebih Mudah?
Meratakan Iterator dalam C
Selalunya dalam sains data dan tugasan manipulasi data, kita menghadapi struktur bersarang atau hierarki. Mengulangi struktur sedemikian dalam satu cara yang berurutan boleh menjadi mencabar. Ini membawa kita kepada konsep meratakan iterator, yang menyediakan penyelesaian kepada masalah ini.
Meratakan Pelaksanaan Iterator
Walaupun tidak terdapat sebarang pelaksanaan yang telah ditetapkan dalam perpustakaan C utama, kita boleh mencipta perpustakaan kita sendiri. Berikut ialah contoh pelaksanaan yang memfokuskan pada lelaran ke hadapan:
template <typename OuterIterator> class flattening_iterator { // ... (Code detailing the implementation of the flattening iterator) };
Penggunaan
Untuk menggunakan lelaran merata, kami mentakrifkan fungsi tambahan untuk memudahkan penciptaannya:
template <typename Iterator> flattening_iterator<Iterator> flatten(Iterator it) { return flattening_iterator<Iterator>(it, it); } template <typename Iterator> flattening_iterator<Iterator> flatten(Iterator first, Iterator last) { return flattening_iterator<Iterator>(first, last); }
Dengan fungsi ini, kita boleh meratakan struktur bersarang dan mengulanginya sebagai satu jujukan:
std::vector<std::vector<int>> v = { {0, 1, 2, 3}, {4, 5, 6, 7}, {8, 9, 10, 11} }; for (auto it(flatten(v.begin(), v.end())); it != flatten(v.end()); ++it) { std::cout << *it << ", "; } // Output: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11
Pelaksanaan ini mengendalikan kes di mana bekas dalam mungkin kosong, memastikan lelaran lancar merentas berbilang peringkat.
Atas ialah kandungan terperinci Bagaimanakah Kami Boleh Meratakan Iterator Bersarang dalam C untuk Lelaran Berjujukan Lebih Mudah?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!