c++ - Sparse containers and iterators -


मैंने एक स्पेशल कंटेनर, एक बुनियादी लुक-अप टेबल (एलयूटी) लागू किया है।
यह मूल रूप से एक वेक्टर & lt; T & gt; और नक्शा & lt; size_t, T & gt; :

  1. के बीच एक संकर है (अर्थात आकार कंसट्रक्टर पैरामीटर के रूप में निर्दिष्ट होता है और बदलता नहीं है)
  2. प्रत्येक स्लॉट शुरू में तार्किक रूप से कुछ डिफ़ॉल्ट मान है (अक्सर सिर्फ शून्य)
  3. कॉलर तब पढ़ या लिख ​​सकता है
  4. किसी भी स्लॉट पर वांछित प्रविष्टि (जैसे कि vector के साथ)
  5. कॉलर तब गैर-डिफ़ॉल्ट प्रविष्टियों को कुशलता से गणना कर सकता है

    (मैंने वास्तव में इस कंटेनर को कैसे कार्यान्वित किया है, यह अप्रासंगिक है, इसलिए मैं वहां नहीं जाऊंगा।)

    अब मैं इसके लिए एक इटरेटर डिजाइन करने की कोशिश कर रहा हूं, लेकिन मैं यह जानना चाहता हूं कि कैसे

    एक तरफ, आईटरेटर को यादृच्छिक पहुंच होना चाहिए, क्योंकि कंटेनर अनिवार्य रूप से एक विरल vector है, और अन्यथा समान रूप से अधिक या कम व्यवहार करता है।

    > टी पर वह दूसरी तरफ, प्रत्येक स्लॉट के लिए "डिफ़ॉल्ट" प्रविष्टि को अभिमानी माना जाता है; यह है कि यह for_each (lut.begin (), lut.end (), func) की तरह कुछ का मूल्यांकन करना है हो सकता है और करता आवश्यक रूप से डिफ़ॉल्ट मानों के साथ स्लॉट को छोड़ें (पर्याप्त गति के लिए)।

    समस्या:

    मैं इस कक्षा के लिए एक इटरेटर को कैसे ठीक से डिजाइन करूं? क्या यह भी समझ में आता है?

    वर्तमान में, मैं इसे लागू करने की सोच रहा हूँ जैसे कि iterator :: ऑपरेटर ++ इटरेटर को अगले गैर-डिफ़ॉल्ट प्रविष्टि पर इंगित करने के लिए वृद्धि करता है, जबकि इटरेटर :: ऑपरेटर + (डी) बस एक ऑफ़सेट d जोड़ता है चाहे उस स्लॉट पर प्रविष्टि मान्य है या नहीं। इसलिए "बढ़ते हुए" का अब "1 जोड़ना" का अर्थ नहीं है।

    जो, ​​उसके चेहरे पर हास्यास्पद लगता है।
    लेकिन मैं एक बेहतर तरीके से नहीं सोच सकता।
    क्या कोई है ?

    आप वास्तव में दो भिन्न प्रकार के iterators का वर्णन कर रहे हैं: एक है जो डिफ़ॉल्ट मानों को छोड़ता है जब incremented, और ऐसा नहीं लगता है।

    इसलिए, ऐसा लगता है कि एपीआई को कंटेनर उपयोगकर्ता को किसी भी तरह पेश करने का एक तरीका प्रदान करना चाहिए, ताकि उपयोगकर्ता को उस व्यवहार को चुनना पड़े जो वे इटरेटर से बाहर निकलते हैं।

Comments

Popular posts from this blog

ios - Adding an SKSpriteNode to SKScene from a child SKSpriteNode -

Matlab transpose a table vector -

c# - Textbox not clickable but editable -