我正在製作一個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