我正在制作一个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