2010-11-18 20 views
9

'सही' एक और एक करने के लिए एक एसटीडी से सभी तत्वों को जोड़ने के लिए रास्ता :: सूची क्या है करने के लिए एक सूची से तत्वों को जोड़ने के लिए रास्ता?सरल एक और सूची

void 
Node::addChilds(const NodeList *list) 
{ 
    for(NodeList::const_iterator i = list->begin(); 
     i != list->end(); 
     ++i) 
     { 
      this->m_childs.push_back(*i); 
     } 
} 

मैं std :: नकल के बारे में सोचा है, लेकिन प्रति के लिए afaik मैं गंतव्य सूची आकार बदलने के लिए है, बैकअप अंत इटरेटर (आकार बदलने से पहले) आदि

मैं एक एकल लाइन के लिए खोज कर रहा हूँ बयान।

+1

'NodeList' क्या है? 'M_childs' कैसे घोषित किया गया है? –

उत्तर

12

back_insert_iterator का उपयोग करें। यदि std::list<T>m_childs के प्रकार,

std::copy(list.begin(), list.end(), 
      std::back_insert_iterator<std::list<T> >(m_childs)); 
+0

दोनों इस और @ybungalobill सही हैं। हालांकि मैं इसे पसंद करता हूं। यहां बताया गया है: [http://stackoverflow.com/questions/4152815/stl-use-member-functions-or-functions-in-algorithm/4156380#4156380] –

+3

मैंने सोचा होगा कि सदस्य कार्य 'सूची :: insert' होगा अधिक कुशल हो। कोई विचार है कि यह सही है? –

+2

इंटेल कोर 2 @ 1.86GHz, जीसीसी 4.3.2 पर चल रहे लिनक्स/x86 पर, 10000000 तत्वों के साथ एक सूची भरना, इसे दूसरी सूची में कॉपी करना और दूसरे तत्व को प्रिंट करना सीए लेता है। 2.5S दीवार-घड़ी समय, 2.1s उपयोगकर्ता समय, चाहे 'copy' या' insert' प्रयोग किया जाता है की स्वतंत्र। –

12

तत्वों को स्थानांतरित किया जाना चाहिए है, तो आप जोड़ उपयोग कर सकते हैं। अन्यथा उन्हें कॉपी करें, जैसा कि यबंगलोबिल या लार्समैन द्वारा समझाया गया है।

3

स्कॉट Meyers, "प्रभावी एसटीएल" में इस विशिष्ट विषय के बारे में लिखते आइटम 5 में (और आइटम 4 में splice का उल्लेख है)। उन्होंने ybungalobill के संस्करण पसंद करते हैं, लेकिन ज्यादातर क्योंकि वह सोचता है कि कोड क्लीनर और स्पष्ट है, क्योंकि यह शब्द 'डालने' और नहीं शब्द 'प्रतिलिपि' पर जोर देती है।

लगभग std::copy के सभी उपयोगों जो एक इटरेटर का उपयोग करता है (जैसे back_inserter) कॉल के साथ सदस्य कार्य (.insert(position, begin, end) की तरह) लेकर बदला जा सकता है। तो यह तेजी से हो सकता है अगर यह इस विशेष मामले में लागू होता है

splice, एक निरंतर समय सदस्य कार्य है।

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