2013-01-01 28 views
8

में इरेंज और counting_range के बीच अंतर irange और counting_range के बीच क्या अंतर है?बूस्ट

मैं irange जरूरत जल्दी से इस तरह पूर्णांकों की एक श्रृंखला उत्पन्न करने के लिए:

auto example = boost::irange(0, 5); /// result is {0, 1, 2, 3, 4} 

लेकिन कहीं न कहीं एक उदाहरण देखा (लिंक खो) कि counting_range के बारे में बात करती है बजाय एक ही कार्य को पूरा करने। क्या इन दोनों के बीच अंतर का एक सरल स्पष्टीकरण है?

+2

यह एक अविश्वसनीय रूप से दुर्लभ उदाहरण रहा है कि एसओ पर आधिकारिक और सहकर्मी-समीक्षा तथ्य के रूप में गलत जानकारी कैसे प्रस्तुत की जा सकती है। –

उत्तर

27

मुख्य अंतर यह है कि irange एक यादृच्छिक-अभिगम सीमा है जबकि counting_range नहीं है। counting_range Boost.Iterator's counting_iterator पर आधारित है जो सभी अंतर्निहित पूर्णांक संचालन का उपयोग सीधे करता है। सी ++ में इंटीजर लगभग इटरेटर अवधारणा को फिट करते हैं: केवल एक चीज गायब है operator* है। counting_iterator एक पहचान ऑपरेशन के रूप में operator* प्रदान करता है और अंतर्निहित प्रकार के लिए बाकी सब कुछ प्रदान करता है।

एक और अंतर यह है कि irange भी वेतन वृद्धि की तुलना में 1.

उनमें से कोई भी कभी पूर्णांक है कि वे अधिक पुनरावृति की पूरी रेंज को भौतिक रूप धारण विभिन्न समर्थन करता है, तो वे दोनों का उपयोग हे (1) स्मृति।

0

irange और counting_range दोनों पूर्णांक प्रकारों के लिए एक यादृच्छिक पहुंच सीमा मॉडल। वहाँ प्रभावी ढंग से से प्रत्येक श्रृंखला के प्रकार से कोई फर्क नहीं (एक तरफ है,

if (CategoryOrTraversal is not use_default) 
    return CategoryOrTraversal 
else if (numeric_limits<Incrementable>::is_specialized) 
    return iterator-category(random_access_traversal_tag, Incrementable, const Incrementable&) 
else 
    return iterator-category(iterator_traversal<Incrementable>::type, Incrementable, const Incrementable&) 

इसलिए, इस तरह boost::irange(0, 10) और boost::counting_range(0, 10) के रूप में सरल श्रेणियों के लिए: counting_range रों प्रलेखन बताते हैं, इसके iterator श्रेणी निम्नलिखित कलन विधि के अनुसार निर्धारित किया जाता है बेशक!)।

हालांकि, irange भी यात्रा एक अलग कदम आकार के साथ, का समर्थन करता है, उदाहरण के लिए boost::irange(0, 10, 2), और counting_range भी प्रकार है कि केवल incrementable कर रहे हैं और पूरी तरह से एक पूर्णांक मॉडल नहीं है समर्थन करता है।