C ++ поведение связанного списка - PullRequest
5 голосов
/ 28 февраля 2010

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

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

Спасибо, Gokul.

Ответы [ 2 ]

7 голосов
/ 28 февраля 2010

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

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

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

2 голосов
/ 28 февраля 2010

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

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

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

...