2010-02-27 27 views
5

मेरे पास कुछ सी कोड है, जहां दो लिंक वाली सूचियां हैं (ए और बी कहें) और ए को बी और ए में किसी विशेष स्थिति में डाला गया है, फिर भी तत्व हैं।सी ++ लिंक्ड सूची व्यवहार

मैं सी ++ एसटीएल का उपयोग कर प्रभावी व्यवहार को कैसे अनुकरण कर सकता हूं? अगर मैं splice कोशिश करता हूं, तो यह दूसरा खाली खाली बनाता है।

धन्यवाद, गोकुल।

उत्तर

2

आपको तत्वों की प्रतिलिपि बनाने की आवश्यकता है। कुछ इस तरह विचार करें:

std::copy(a.begin(), a.end(), std::inserter(b, b_iterator)); 

आप एक ही नोड्स दो सूचियों द्वारा साझा चाहते हैं, यह बस std::list द्वारा समर्थित नहीं है (एसटीएल कंटेनर हमेशा अनन्य स्वामित्व है)। आप सूची में पॉइंटर्स को संग्रहीत करके या boost::ptr_list का उपयोग करके तत्वों को डुप्लिकेट करने से बच सकते हैं, जो आंतरिक रूप से पॉइंटर्स संग्रहीत करता है लेकिन एक अच्छा एपीआई प्रदान करता है।

+0

नोट करें कि अन्य समाधान (http://stackoverflow.com/questions/2349098/2349119#2349119) से संभावित रूप से धीमा है। यह क्यों है http://stackoverflow.com/questions/2551775/2551808#2551808 पर टिप्पणियां देखें। – sbi

7

कोशिश डालने:

B.insert(position, A.begin(), A.end()); 

'स्थिति' से पहले बी में एक के तत्वों की प्रतियां डालने के लिए। एक अपरिवर्तित बनी हुई है। यह link

+0

+1 मेरे से बेहतर उत्तर +1। – Tronic

+0

@ पुरानी: धन्यवाद। – Arun

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