Ich mache eine C++ 11-Klasse, die eine große Menge an Daten produziert. Diese Daten stammen derzeit aus einer Datenbank und können nicht vollständig in den Speicher passen. Ich möchte dem Benutzer einen Iterator zur Verfügung stellen, der sich wie normale STL-Iteratoren verhält, aber das wäre faul. Genauer gesagt könnte ich Folgendes tun:Wie könnte ich meinen eigenen faulen Iterator erstellen?
for (auto& item : big_bunch_of_data) {
do_stuff_with(item);
}
Mit Element wird nur bei jeder Iteration aus der Datenbank abgerufen. Wenn ich Recht habe, diese neue Syntax ist Zucker für
for (stuff::iterator it = big_bunch_of_data.begin();it != big_bunch_of_data.end();it++) {
do_stuff_with(*it);
}
Bedeutet es, dass begin
durch die Bereitstellung, end
und operator++
ich das gewünschte Verhalten haben könnte? Und was sollen diese Methoden tun? Ich meine, kann ich sie faul machen, ohne etwas kaputt zu machen?
_ "Diese Daten kommen derzeit aus einer Datenbank und können nicht vollständig in den Speicher passen" _ also, ohne Ihre Datenbank zu kennen, ist es schwierig, bessere Ratschläge zu geben ... aber bedenken Sie, dass viele SQL-Datenbanken ihre eigenen internen Iterator-Mechanismen enthalten die Form von _cursors_, die Ihnen hier nützlich sein könnte. – Rook
Ich benutze sqlite, aber das könnte sich in der Zukunft ändern, und ich möchte keine rohen Zeiger den Benutzern meines Codes zugänglich machen, deshalb versuche ich, seine ziemlich gute (und ja, schon faul) einzukapseln API. – Fabien