С++ Связанное поведение списка

У меня есть код C, в котором есть два связанных списка (например, A и B), и A вставлен в определенную позицию в B, а A все еще имеет элементы.

Как эффективно имитировать такое же поведение с помощью С++ STL? Если я попробую сплайсинг, он сделает второй пустым.

Спасибо, Gokul.

Ответ 1

Вам нужно скопировать элементы. Рассмотрим что-то вроде этого:

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

Если вам нужны одни и те же узлы, разделенные двумя списками, это просто не поддерживается std::list (контейнеры STL всегда имеют эксклюзивное право собственности). Вы можете избежать дублирования элементов путем хранения указателей в списке или с помощью boost::ptr_list, который внутренне хранит указатели, но предлагает более удобный API.

Ответ 2

Попробуйте вставить:

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

вставить копии элементов A в B перед "позицией". Само по себе остается неизменным. См. Ссылку