как добавить объект list <T> к другому

94

в C ++ у меня есть два list<T>объекта, Aи Bя хочу добавить все члены Bв конец A. Я искал несколько разных источников и не нашел простого решения (ei A.append(B);), и это меня немного удивляет.

Как лучше всего это сделать?

Так получилось, что после этого меня не волнует B (он удаляется в следующей строке), поэтому, если есть способ использовать это для улучшения производительности, меня это тоже интересует.

БКС
источник

Ответы:

195

Если вы хотите добавить копии элементов в B, вы можете сделать:

a.insert(a.end(), b.begin(), b.end());

Если вы хотите переместить элементы B в конец A (одновременно опустошив B), вы можете сделать:

a.splice(a.end(), b);

В вашей ситуации сращивание было бы лучше, так как оно просто включает в себя настройку пары указателей в связанных списках.

Дядя Бен
источник
8
+1. Так хорошо. Если бы можно было так просто и эффективно «разрезать» карты и сеты ...
paercebal
Является ли любая из этих операций O (1)?
Крис Редфорд
2
Я предполагаю, что splice должен быть O (1) для случая выше.
chunkyguy
9
Это O (1) для a.splice(a.end(), b)и a.splice(a.end(), b, it_b_start), но O (n) для a.splice(a.end(), b, it_b_start, it_b_end).
hkBattousai 08
10
Почему, почему STL не может просто поддерживать a.append (b)?
srking
-3

один пример с использованием ускорения

std::list<T> A; // object A is a list containing T structure
std::list<T> B; // object B is a list containing T structure

// append list B to list A
BOOST_FOREACH(auto &listElement, B) { A.push_back( listElement ); }
Serup
источник