私は膨大な量のデータを生成する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++
を提供することで、私は希望の挙動を有することができることを意味していますか?そして、これらの方法は何をすべきか?私は、物を壊さずに怠け者にすることはできますか?
_ "そのデータは現在データベースから来ており、完全にメモリに収まらない" _したがって、データベースを知らなくても、より良いアドバイスをするのは難しいです...しかし、多くのSQLデータベースが独自の内部イテレータメカニズム_cursors_の形式は、ここであなたの役に立つかもしれません。 – Rook
私はsqliteを使用していますが、将来変更される可能性があり、コードのユーザに未加工のポインタを公開したくないので、その良い(とはいって、怠惰な) API。 – Fabien