Я создаю класс С++ 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++
, я мог бы иметь желаемое поведение? И что должны делать эти методы? Я имею в виду, могу ли я сделать их ленивыми, не разбирая вещи?