2010-02-27 17 views
5

Ich habe einen C-Code, in dem zwei verknüpfte Listen sind (zB A und B) und A an einer bestimmten Position in B eingefügt wird und A immer noch Elemente hat.C++ Verhalten der verknüpften Liste

Wie simuliere ich das gleiche Verhalten effektiv mit der C++ STL? Wenn ich Spleiß versuche, macht es den zweiten leer.

Danke, Gokul.

Antwort

2

Sie müssen die Elemente kopieren. Betrachten wir etwas wie folgt aus:

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

Wenn Sie die gleichen Knoten durch zwei Listen geteilt wollen, ist dies einfach nicht unterstützt durch std::list (STL-Containern haben immer ausschließliches Eigentum). Sie können das Duplizieren der Elemente vermeiden, indem Sie Zeiger in der Liste speichern, oder indem Sie boost::ptr_list verwenden, das intern Zeiger speichert, aber eine bessere API bietet.

+0

Beachten Sie, dass das möglicherweise langsamer ist als die andere Lösung (http://stackoverflow.com/questions/2349098/2349119#2349119). Siehe die Kommentare unter http://StackOverflow.com/Questions/2551775/2551808#2551808 für warum das ist. – sbi

7

Try Insert:

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

Kopien der Elemente von A in B einzufügen, bevor 'Position'. A selbst bleibt unverändert. Siehe hierzu link

+0

+1 bessere Antwort als meine. – Tronic

+0

@Tronic: Danke. – Arun

Verwandte Themen