2012-04-07 10 views
17

के बाद से nonmember begin() और end() कार्यों मानक के लिए जोड़ा गया था सी ++ 11 संशोधन में शामिल हैं, क्यों rbegin() और rend() कार्यों का nonmember संस्करण है नहीं किया गया साथ ही जोड़ा गया? मैंने शुरू begin() और end() की nonmember संस्करण का उपयोग करें के बाद मूर्खतापूर्ण लग रहा है, केवल मैं अब सदस्य का उपयोग और nonmember फ़ंक्शन कॉल के बीच टॉगल करने के लिए है कि खोजने के लिए। (मुझे लगता है कि यह rbegin() और rend() की अपने ही nonmember संस्करणों रोल करने तुच्छ होगा, लेकिन क्यों इस मानक में नहीं जोड़ा गया मैं सोच रहा हूँ)।सी ++ 11: nonmember rbegin()/उखड़ना() फ़ंक्शन

आपके इनपुट के लिए धन्यवाद।

+0

मैं कुछ याद [मूल निवासी जा रहे हैं 2012] पर प्रस्तुतियों में से एक में इस बारे में कहा जा रहा है (http://channel9.msdn.com/Events/GoingNative/GoingNative-2012)। ऐसा लगता है कि इन कार्यों को आसानी से भुला दिया गया था और बाद में मानक में जोड़ा जा सकता है (होगा?)। –

+0

गैर-सदस्य 'प्रारंभ() 'और' अंत() 'फ़ंक्शंस का उपयोग C++ 11 में जोड़े गए' के ​​लिए 'कथन के नए रूप द्वारा किया जाता है। अन्य कार्य नहीं हैं। –

उत्तर

5

std::begin और std::end के परिणामों पर आप मैन्युअल रूप से std::reverse_iterator का उपयोग करके उलट श्रेणी का निर्माण कर सकते हैं।

अजीब तरह, वहाँ reverse_iterator के लिए एक मानक कारखाने कार्य नहीं है। अगर वहाँ थे, यह शायद इस प्रकार दिखाई देगा:

template< typename iter > 
std::reverse_iterator<iter> reverse(iter i) 
    { return { i }; } 

इस के साथ सशस्त्र, आप

std::sort(reverse(std::end(my_array)), reverse(std::begin(my_array))); 

यह उदाहरण std::greater तुलनित्र निर्दिष्ट करने के मुसीबत बचाता है क्या कर सकते हैं, लेकिन reverse_iterator क़यास पर प्रतिकूल असर पड़ सकता है प्रदर्शन अगर संकलक आंतरिक लूप से अतिरिक्त जटिलता को हटा नहीं सकता है।

7

जो लोग इसे बाद में देखते हैं, उनके लिए rbegin() और rend() पहले से ही C++ 14 में हैं।

+1

यूप! http://en.cppreference.com/w/cpp/iterator/rbegin – Johnsyweb

+1

हा! मैं यही उम्मीद करता हूं। क्योंकि मैं शुरू() nonmember फ़ंक्शन के आधार पर rbegin() जोड़ने के ऊपरी हिस्से को नहीं देख सकता। सी ++ 14 गले लगाओ! – 8090PZ