2010-02-27 9 views
5

J'ai du code C, où il y a deux listes chaînées (disons A et B) et A est inséré à une position particulière dans B et A a toujours des éléments.Comportement de la liste chaînée C++

Comment est-ce que je simule le même comportement efficacement en utilisant le STL C++? Si j'essaie d'épisser, cela rend le second vide.

Merci, Gokul.

Répondre

2

Vous devez copier les éléments. Considérez quelque chose comme ceci:

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

Si vous voulez les mêmes noeuds partagés par deux listes, cela est tout simplement pas pris en charge par std::list (conteneurs STL ont toujours la propriété exclusive). Vous pouvez éviter de dupliquer les éléments en stockant des pointeurs dans la liste ou en utilisant boost::ptr_list, qui stocke en interne les pointeurs mais offre une API plus agréable.

+0

Notez qu'il est potentiellement plus lent que l'autre solution (http://stackoverflow.com/questions/2349098/2349119#2349119). Voir les commentaires à http://stackoverflow.com/questions/2551775/2551808#2551808 pour savoir pourquoi. – sbi

7

essai insert:

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

pour insérer des copies des éléments de A par B avant 'position'. A lui-même reste inchangé. Voir ce link

+0

+1 meilleure réponse que la mienne. – Tronic

+0

@Tronic: Merci. – Arun