en.cppreference.com और वीसी ++ 14.0 के अनुसार, इटरेटर्स को कॉपी कन्स्ट्रक्टर और कॉपी असाइनमेंट ऑपरेटरों की आवश्यकता होती है।इटेटर को प्रतिलिपि बनाने योग्य और कॉपी करने योग्य क्यों होना चाहिए?
मेरा इटरेटर क्लास (यह विंडोज प्रक्रियाओं के माध्यम से पुनरावृत्त) कभी भी प्रति-रचनात्मक या कॉपी-असाइन करने योग्य नहीं हो सकता है - इसमें HANDLE
स्नैपशॉट के लिए रखता है और इसे मुक्त करने का प्रबंधन करता है, इसलिए उनको कॉपी करना असंभव है - उन्हें स्थानांतरित करना संभव है, मैं एक चालक कन्स्ट्रक्टर की आपूर्ति की और असाइनमेंट ऑपरेटर ले जाएँ। हालांकि, एल्गोरिदम std::find_if
उन्हें प्रतिलिपि बनाता है (वीसी ++ 14.0 में कुछ std::_Find_if
पर कॉल किया जाता है जिसके लिए इटरेटर की प्रतिलिपि बनाना आवश्यक है) और काम नहीं करना चाहता।
आपका पुनरावर्तक संसाधन पर क्यों जाता है? एक पुनरावर्तक एक सूचक की तरह होना चाहिए जहां यह कुछ इंगित करता है।
क्योंकि विंडोज प्रक्रियाओं के माध्यम से पुनरावृत्ति करने के लिए, आपको स्नैपशॉट बनाने की आवश्यकता है, और फिर ऐसा करने के लिए इसका उपयोग करें - समस्या यह है कि एक स्नैपशॉट, एक पुनरावृत्ति। स्नैपशॉट भी कॉपी करने योग्य नहीं है।
वे MoveConstructible
और MoveAssignable
क्यों नहीं हो सकते हैं? कौन सा एल्गोरिदम (यदि कोई है) वास्तव में काम करने के लिए इटरेटर की प्रतिलिपि बनाने की आवश्यकता है?
आपका पुनरावर्तक संसाधन पर क्यों जाता है? एक पुनरावर्तक एक सूचक की तरह होना चाहिए जहां यह कुछ इंगित करता है। – NathanOliver
@NathanOliver, यह सच नहीं है। उदाहरण के लिए स्ट्रीम इटरेटर, पॉइंटर्स की तरह कुछ भी नहीं हैं। – SergeyA
इटरेटर्स की गणना करना, और कुछ भी जो मूल्य उत्पन्न करता है, आंतरिक रूप से ऐसे राज्य को पकड़ सकता है। सामान्य इनपुट इटरेटर्स को उनके अंदर चीजों को स्टोर करने की इजाजत दी जाती है (कभी-कभी "इसे घुमावदार" कहा जाता है), लेकिन फॉरवर्डइटरेटर आवश्यकताओं को पूरा करने वाले किसी भी चीज़ के लिए यह संभव नहीं है। –