Как я могу сделать свой собственный ленивый итератор?
Я делаю класс C ++ 11, который производит огромное количество данных. Эти данные в настоящее время поступают из базы данных, и они не могут полностью поместиться в памяти. Я хотел бы предоставить пользователю итератор, который ведет себя как обычные итераторы STL, но это было бы лениво. Точнее, я бы смог сделать что-то подобное:
for (auto& item : big_bunch_of_data) {
do_stuff_with(item);
}
С предметом, извлекаемым из базы данных только на каждой итерации. Если я прав, этот новый синтаксис является сахаром для
for (stuff::iterator it = big_bunch_of_data.begin();it != big_bunch_of_data.end();it++) {
do_stuff_with(*it);
}
Означает ли это, что, предоставляяbegin
, end
а такжеoperator++
Я мог иметь желаемое поведение? И что эти методы должны делать? Я имею в виду, я могу сделать их ленивыми, не ломая вещи?