2009-09-19 7 views
69

सी ++ में करने के लिए एक सूची वस्तु संलग्न करने का तरीका, मैं दो list<T> वस्तुओं A और B है और मैं A के अंत तक B के सभी सदस्यों को जोड़ना चाहते हैं। मैंने कुछ अलग-अलग स्रोतों की खोज की है और मुझे एक साधारण समाधान नहीं मिला है (e.i. A.append(B);) और यह मुझे थोड़ा आश्चर्यचकित करता है। एक और

ऐसा करने का सबसे अच्छा तरीका क्या है?

जैसा कि होता है, मुझे इसके बाद बी की परवाह नहीं है (यह अगली पंक्ति में हटा दिया जाता है) ताकि यदि बेहतर perf के लिए इसका लाभ उठाने का कोई तरीका है तो मुझे इसमें रूचि भी है।

उत्तर

144

आप बी में मदों की प्रतियां संलग्न करना चाहते हैं, तो आप कर सकते हैं:

a.insert(a.end(), b.begin(), b.end()); 

आप कदम एक ही समय में एक (खाली बी के अंत में बी के आइटम चाहते हैं), तो आप कर सकते हैं:

a.splice(a.end(), b); 

अपनी स्थिति स्प्लिसिंग में बेहतर होगा, क्योंकि यह सिर्फ जुड़ा हुआ सूचियों में संकेत के एक जोड़े का समायोजन शामिल है।

+7

+1 का उपयोग कर। बिल्कुल सही। यदि यह "स्लाइस" मानचित्रों और सेटों के लिए इतना आसान और कुशल हो सकता था ... – paercebal

+0

इनमें से कोई भी ऑपरेशन ओ (1) है? –

+2

मुझे लगता है कि उपरोक्त मामले के लिए splice ओ (1) होना चाहिए। – chunkyguy

0

एक उदाहरण बढ़ावा

std::list<T> A; // object A is a list containing T structure 
std::list<T> B; // object B is a list containing T structure 

// append list B to list A 
BOOST_FOREACH(auto &listElement, B) { A.push_back(listElement); }