c++ - Sparse containers and iterators -
मैंने एक स्पेशल कंटेनर, एक बुनियादी लुक-अप टेबल (एलयूटी) लागू किया है। (मैंने वास्तव में इस कंटेनर को कैसे कार्यान्वित किया है, यह अप्रासंगिक है, इसलिए मैं वहां नहीं जाऊंगा।) अब मैं इसके लिए एक इटरेटर डिजाइन करने की कोशिश कर रहा हूं, लेकिन मैं यह जानना चाहता हूं कि कैसे एक तरफ, आईटरेटर को यादृच्छिक पहुंच होना चाहिए, क्योंकि कंटेनर अनिवार्य रूप से एक विरल > टी पर वह दूसरी तरफ, प्रत्येक स्लॉट के लिए "डिफ़ॉल्ट" प्रविष्टि को अभिमानी माना जाता है; यह है कि यह समस्या: वर्तमान में, मैं इसे लागू करने की सोच रहा हूँ जैसे कि जो, उसके चेहरे पर हास्यास्पद लगता है। आप वास्तव में दो भिन्न प्रकार के iterators का वर्णन कर रहे हैं: एक है जो डिफ़ॉल्ट मानों को छोड़ता है जब incremented, और ऐसा नहीं लगता है। इसलिए, ऐसा लगता है कि एपीआई को कंटेनर उपयोगकर्ता को किसी भी तरह पेश करने का एक तरीका प्रदान करना चाहिए, ताकि उपयोगकर्ता को उस व्यवहार को चुनना पड़े जो वे इटरेटर से बाहर निकलते हैं।
यह मूल रूप से एक वेक्टर & lt; T & gt; और
नक्शा & lt; size_t, T & gt; :
vector के साथ)
vector है, और अन्यथा समान रूप से अधिक या कम व्यवहार करता है।
for_each (lut.begin (), lut.end (), func) की तरह कुछ का मूल्यांकन करना है हो सकता है और करता आवश्यक रूप से डिफ़ॉल्ट मानों के साथ स्लॉट को छोड़ें (पर्याप्त गति के लिए)।
मैं इस कक्षा के लिए एक इटरेटर को कैसे ठीक से डिजाइन करूं? क्या यह भी समझ में आता है?
iterator :: ऑपरेटर ++ इटरेटर को अगले गैर-डिफ़ॉल्ट प्रविष्टि पर इंगित करने के लिए वृद्धि करता है, जबकि
इटरेटर :: ऑपरेटर + (डी) बस एक ऑफ़सेट
d जोड़ता है चाहे उस स्लॉट पर प्रविष्टि मान्य है या नहीं। इसलिए "बढ़ते हुए" का अब "1 जोड़ना" का अर्थ नहीं है।
लेकिन मैं एक बेहतर तरीके से नहीं सोच सकता।
क्या कोई है ?
Comments
Post a Comment