2010-02-27 3 views
5

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

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

Thanks, Gokul.

ответ

2

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

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

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

+0

Обратите внимание, что это потенциально медленнее, чем другое решение (http://stackoverflow.com/questions/2349098/2349119#2349119). См. Комментарии по адресу http://stackoverflow.com/questions/2551775/2551808#2551808 для чего это. – sbi

7

Try вставка:

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

вставить копии элементов A в B до »положения. Само по себе остается неизменным. См. Это link

+0

+1 лучше, чем мой. – Tronic

+0

@Tronic: Спасибо. – Arun

Смежные вопросы