2010-02-27 25 views
5

Tengo un código C, donde hay dos listas vinculadas (por ejemplo, A y B) y A se inserta en una posición particular en B y A todavía tiene elementos.C++ Lista enlazada comportamiento

¿Cómo puedo simular el mismo comportamiento de manera efectiva utilizando C++ STL? Si trato de empalmar, hace que el segundo esté vacío.

Gracias, Gokul.

Respuesta

2

Tiene que copiar los elementos. Considerar algo como esto:

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

Si desea que los mismos nodos compartidos por dos listas, esto simplemente no es apoyado por std::list (contenedores STL siempre tienen la propiedad exclusiva). Puede evitar la duplicación de elementos almacenando punteros en la lista, o usando boost::ptr_list, que internamente almacena punteros pero ofrece una API más agradable.

+0

Tenga en cuenta que es potencialmente más lento que la otra solución (http://stackoverflow.com/questions/2349098/2349119#2349119). Vea los comentarios en http://stackoverflow.com/questions/2551775/2551808#2551808 para saber por qué. – sbi

7

Trate de inserción:

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

para insertar copias de los elementos de A en B antes 'posición'. A en sí mismo permanece sin cambios. Consulte esto link

+0

+1 mejor respuesta que la mía. – Tronic

+0

@Tronic: Gracias. – Arun

Cuestiones relacionadas