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

Popular posts from this blog

c# - SignalR: "Protocol error: Unknown transport." when navigating to hub -

c# - WPF Expander overlay used in ItemsControl -

class - Kivy: how to instantiate a dynamic classes in python -