c++ - Are std::move and std::copy identical? -
मैंने ऐसा करने की कोशिश की:
std :: copy (std :: make_move_iterator (S1.begin ()), std :: make_move_iterator (s1.end ()), std :: make_move_iterator (s2.begin ()));
और यह त्रुटि मिली:
त्रुटि: xvalue (rvalue संदर्भ) का उपयोग कर lvalue * __ परिणाम = std :: move (* __ पहले) के रूप में;
मेरे लिए भ्रामक लग रहा था यदि आप std :: move
का उपयोग करते हैं, तो ऐसा ही होता है ऐसा प्रतीत होता है कि जीसीसी आंतरिक रूप से std :: __ copy_move_a
नामक एक फ़ंक्शन का उपयोग करती है जो कॉपी की बजाय चालें। क्या यह बात है कि क्या आप std :: copy
या std :: move
#include & lt; स्ट्रिंग & gt; # शामिल करें & lt; iostream & gt; # शामिल करें & lt; एल्गोरिथम & gt; # शामिल & lt; इटरेटर & gt; # शामिल करें & lt; cstring & gt; Struct टेस्ट {typedef std :: string :: value_type value_type; Std :: स्ट्रिंग डेटा; टेस्ट () {} टेस्ट (कॉन्स्ट char * डेटा): डेटा (डेटा) {} ~ टेस्ट () {} टेस्ट (कॉन्स्ट टेस्ट और अन्य): डेटा (अन्य। डेटा) {std :: cout & lt; & lt; "प्रतिलिपि कन्स्ट्रक्टर। \ N"; } टेस्ट एंड amp; ऑपरेटर = (कॉन्स्ट टेस्ट और अन्य) {data = other.data; Std :: cout & lt; & lt; "असाइनमेंट ऑपरेटर को कॉपी करें। \ N"; वापसी * यह; } टेस्ट (टेस्ट और अन्य): डेटा (स्टडी :: चाल (अन्य डेटा)) {std :: cout & lt; & lt; "कन्स्ट्रक्टर ले जाएं। \ N"; } Decltype (data.begin ()) शुरू () {वापसी data.begin (); } Decltype (data.end ()) अंत () {return.end. (); } शून्य पुश_बैक (std :: string :: value_type ch) {data.push_back (ch); }}; इंट मुख्य () {टेस्ट एस 1 ("टेस्ट"); टेस्ट एस 2 ("चार"); Std :: copy (std :: make_move_iterator (s1.begin ()), std :: make_move_iterator (s1.end ()), std :: make_move_iterator (s2.begin ())); Std :: cout & lt; & lt; s2.data; }
std :: चाल (ए, बी, सी); < / कोड> std :: copy (std :: make_move_iterator (a), std :: make_move_iterator (b), c) के लिए semantically similar है;
उन दोनों का उपयोग करने के आपके प्रयास विफल हो गए क्योंकि तीसरा तर्क - आउटपुट इटरेटर - होना चाहिए नहीं एक चाल चलने वाला हो। आप तीसरा इटरेटर में जमा कर रहे हैं, इससे आगे बढ़ते नहीं हैं। दोनों
std :: copy (std :: make_move_iterator (s1.begin ()), std :: make_move_iterator (s1.end ()), s2.begin ());
और
std :: चाल (s1.begin (), s1.end (), s2.begin ());
को आप क्या करना चाहिए।
Comments
Post a Comment