Jak mogłem stworzyć własny leniwy iterator?
Tworzę klasę C ++ 11, która generuje ogromną ilość danych. Dane te pochodzą obecnie z bazy danych i nie mogą całkowicie zmieścić się w pamięci. Chciałbym udostępnić użytkownikowi iterator, który zachowuje się jak zwykłe iteratory STL, ale byłoby to leniwe. Dokładniej, mógłbym zrobić coś takiego:
for (auto& item : big_bunch_of_data) {
do_stuff_with(item);
}
Przy pobieraniu elementu z bazy danych tylko przy każdej iteracji. Jeśli mam rację, ta nowa składnia to cukier
for (stuff::iterator it = big_bunch_of_data.begin();it != big_bunch_of_data.end();it++) {
do_stuff_with(*it);
}
Czy to oznacza, że zapewniającbegin
, end
ioperator++
, Mógłbym mieć pożądane zachowanie? I jakie mają być te metody? Mam na myśli, czy mogę sprawić, że będą leniwi, nie przerywając?