मैं एक सी ++ 11 कक्षा बना रहा हूं जो बड़ी मात्रा में डेटा उत्पन्न करता है। वह डेटा वर्तमान में डेटाबेस से आता है और यह पूरी तरह से स्मृति में फिट नहीं हो सकता है। मैं उपयोगकर्ता को एक इटरेटर के साथ प्रदान करना चाहता हूं जो नियमित एसटीएल इटरेटर्स की तरह व्यवहार करता है, लेकिन वह आलसी होगा। दरअसल, मैं ऐसा ही कुछ करने में सक्षम हो जाएगा:मैं अपना आलसी इटरेटर कैसे बना सकता हूं?
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 का उपयोग कर रहा है, लेकिन यह भविष्य में बदल सकता है, और मैं अपने कोड के उपयोगकर्ताओं के लिए कच्चे संकेत बेनकाब करने के लिए नहीं करना चाहते, यही कारण है कि मैं अपनी नहीं बल्कि अच्छा संपुटित करने के लिए कोशिश कर रहा हूँ (और हाँ पहले से ही आलसी,) है एपीआई। – Fabien