jak dołączyć obiekt list <T> do innego

94

w C ++ mam dwa list<T>obiekty Ai Bchcę dodać wszystkie składowe Bna końcu A. Przeszukałem kilka różnych źródeł i nie znalazłem prostego rozwiązania (ei A.append(B);) i to mnie trochę zaskakuje.

Jaki jest najlepszy sposób, aby to zrobić?

Tak się składa, że ​​po tym nie obchodzi mnie B (zostaje usunięte w następnej linii), więc jeśli istnieje sposób na wykorzystanie tego dla lepszej perfekcji, to też mnie to interesuje.

BCS
źródło

Odpowiedzi:

195

Jeśli chcesz dołączyć kopie elementów w B, możesz zrobić:

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

Jeśli chcesz przenieść elementy B na koniec A (opróżnianie B w tym samym czasie), możesz:

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

W twojej sytuacji splicing byłby lepszy, ponieważ wymaga tylko dostosowania kilku wskaźników na połączonych listach.

Wujek Ben
źródło
8
+1. Więc dobrze. Gdyby można było tak łatwo i efektywnie „pokroić” mapy i zestawy ...
paercebal
Czy któraś z tych operacji jest O (1)?
Chris Redford,
2
Myślę, że połączenie powinno być O (1) dla powyższego przypadku.
chunkyguy
9
To jest O (1) dla a.splice(a.end(), b)i a.splice(a.end(), b, it_b_start), ale jest O (n) dla a.splice(a.end(), b, it_b_start, it_b_end).
hkBattousai
10
Dlaczego, o dlaczego, STL nie mógł po prostu obsługiwać a.append (b)?
śpiewanie
-3

jeden przykład z użyciem boost

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
źródło