2013-11-01 7 views
5

vector (साथ ही साथ list और अन्य कंटेनर) में सदस्य फ़ंक्शन (एमएफ) assign है। मैं assign एमएफ (रेंज संस्करण) बनाम असाइनमेंट ऑपरेटर की तुलना करना चाहता हूं।एसटीएल - असाइनमेंट ऑपरेटर बनाम 'असाइन' सदस्य फ़ंक्शन

  1. एक वेक्टर (शुरू से अंत तक नहीं) का एक उप-सीमा आवंटित करने के लिए चाहता है:

    जहां तक ​​मैं समझता हूँ कि यह जब assign उपयोग करने के लिए उपयोगी है।

  2. असाइनमेंट एक सरणी से किया जाता है।

अन्य मामलों में assign एमएफ के लिए कोई विपक्ष नहीं है और असाइनमेंट ऑपरेटर का उपयोग किया जा सकता है। क्या मैं सही हूँ? assign एमएफ का उपयोग करने के कुछ अन्य कारण हैं?

+2

असाइनमेंट के लिए एक और * समर्थक * चाल-असाइनमेंट ऑपरेटर है। यदि आप एक रावल्यू असाइन करते हैं, तो इसे कॉपी करने के बजाय स्थानांतरित कर दिया जाएगा। – jrok

+1

'असाइन' का एक छोटा सा कॉन यह है कि यह किसी भी समान संकेत के मुकाबले आपके कोड को पढ़ने के लिए थोड़ा कम सहज है, लेकिन यह एक छोटा मामला है। –

उत्तर

7

assign का उपयोग करने का मुख्य कारण एक प्रकार के कंटेनर से डेटा को कॉपी करना है।

उदाहरण के लिए, यदि आप std::set<int> की सामग्री को std::vector<int> पर माइग्रेट करना चाहते हैं, तो आप असाइनमेंट ऑपरेटर का उपयोग नहीं कर सकते हैं, लेकिन आप vector.assign(set.begin(), set.end()) का उपयोग कर सकते हैं।

एक और उदाहरण दो कंटेनरों की सामग्री की प्रतिलिपि बना रहा है जो अलग-अलग प्रकार के होते हैं जो एक या दूसरे में परिवर्तनीय होते हैं; यदि आप std::vector<Derived*> को std::vector<Base*> पर असाइन करने का प्रयास करते हैं, तो असाइनमेंट ऑपरेटर अपर्याप्त है।

+0

आप अभी भी 'वेक्टर = std :: वेक्टर (set.begin(), set.end())' आदि कर सकते हैं, इसलिए 'असाइन' पूरी तरह से अनावश्यक है। – emlai

+0

@emlai 'असाइन' उपयोगी है यदि आप पूरी तरह से नए वेक्टर आवंटित करने की बजाय क्षमता का पुन: उपयोग करना चाहते हैं। – TemplateRex

संबंधित मुद्दे