2010-01-16 12 views
5

सी ++ 98 में, मैं std::copy एल्गोरिदम के साथ श्रेणियों की प्रतिलिपि बना सकता हूं।क्या श्रेणियों को स्थानांतरित करने के लिए कोई एल्गोरिदम है?

std::copy(source.begin(), source.end(), destination.begin()); 

क्या सी ++ 0x में कोई एल्गोरिदम है जो तत्वों को स्रोत से गंतव्य तक ले जाता है? या std::copy किसी भी तरह से rvalue iterators की तरह कुछ स्वीकार करने के लिए ओवरलोड किया गया है - क्या ऐसी कोई चीज़ भी है?

एल्गोरिथ्म कुछ इस तरह दिख सकता है:

#include <utility> 

template<class InputIterator, class OutputIterator> 
OutputIterator mooove(InputIterator first, InputIterator last, OutputIterator result) 
{ 
    for (; first != last; ++first, ++last) *result = std::move(*first); 
    return result; 
} 
+0

"चाल" से आपका क्या मतलब है? –

+0

सीमा के प्रत्येक तत्व के लिए कॉपी असाइनमेंट 'ऑपरेटर = (कॉन्स्ट टी एंड)' के बजाय चाल असाइनमेंट 'ऑपरेटर = (टी एंड&) 'को आमंत्रित करना। – fredoverflow

+0

तो एल्गोरिदम प्रतिलिपि बनाने के बजाय, स्रोत सीमा को बदल देगा - यह तत्वों को 'काट देगा'? –

उत्तर

5

यह (खंड 25.3.2 देखें) latest draft में हो रहा है।

मेरे पास सी ++ 03 की एक हार्ड कॉपी है जो C++98 (अनुभाग 25.2.x) के समान है जहां आप वही एल्गोरिदम देख सकते हैं (स्पष्ट रूप से 'चाल' के बिना)।

+0

आह, यह पाया, धन्यवाद। यह वास्तव में 25.3.2 है;) – fredoverflow

0

सिर्फ इसलिए कि यह पृष्ठ अभी एक उलझन में उलझन में है ... std::move(first, last, dest) है, ओपी पुराने सी ++ 0x ड्राफ्ट को देख कर उलझन में था। समारोह खंड 25.3.2 द्वारा परिभाषित किया गया है।

2

एक इटरेटर एडाप्टर भी है, std::move_iterator, जिसका उपयोग किसी भी श्रेणी एल्गोरिदम को अनुकूलित करने के लिए किया जा सकता है जो प्रतियों को तत्वों को स्थानांतरित करने के लिए बनाता है। std::move(first, last, dest) सबसे सामान्य उपयोग मामले के लिए केवल एक सुविधा आवरण है - यह std::copy(std::move_iterator(first), std::move_iterator(last), dest) के बराबर है।

+0

आह, तो वास्तव में एक "rvalue iterator" जैसी चीज है :) – fredoverflow

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

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