किसी अन्य <ऑब्जेक्ट> सूची को कैसे जोड़ा जाए


92

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

इसे करने का बेहतरीन तरीका क्या है?

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

जवाबों:


192

यदि आप बी में वस्तुओं की प्रतियों को जोड़ना चाहते हैं , तो आप ऐसा कर सकते हैं:

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

यदि आप B के आइटम को A के अंत में ले जाना चाहते हैं (उसी समय B खाली करना चाहते हैं), तो आप कर सकते हैं:

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

आपकी स्थिति में splicing बेहतर होगा, क्योंकि इसमें लिंक किए गए सूचियों में केवल कुछ बिंदुओं को समायोजित करना शामिल है।


8
+1। बिल्कुल सही। यदि यह "टुकड़ा" नक्शे और सेट के लिए इतना आसान और कुशल हो सकता था ...
paercebal

क्या इनमें से कोई भी ऑपरेशन O (1) है?
क्रिस रेडफोर्ड

2
मुझे लगता है कि ऊपर के मामले के लिए ब्याह O (1) होना चाहिए।
चंकीगुई

9
यह O (1) के लिए है a.splice(a.end(), b)और a.splice(a.end(), b, it_b_start), लेकिन O (n) के लिए है a.splice(a.end(), b, it_b_start, it_b_end)
hkBattousai

9
क्यों, ओ क्यों, एसटीएल सिर्फ a.append (b) का समर्थन नहीं कर सका?
21

-3

बढ़ावा देने का उपयोग कर एक उदाहरण

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 ); }
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.