come aggiungere un oggetto list <T> a un altro


92

in C ++, ho due list<T>oggetti Ae Bvoglio aggiungere tutti i membri di Balla fine di A. Ho cercato in diverse fonti e non ho trovato una soluzione semplice (ei A.append(B);) e questo mi sorprende un po '.

Qual è il modo migliore per farlo?

Come accade, non mi interessa di B dopo questo (viene cancellato nella riga successiva) quindi se c'è un modo per sfruttarlo per una migliore prestazione, mi interessa anche quello.

Risposte:


193

Se vuoi aggiungere copie di elementi in B, puoi fare:

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

Se vuoi spostare gli elementi di B alla fine di A (svuotando B allo stesso tempo), puoi fare:

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

Nella tua situazione lo splicing sarebbe migliore, poiché implica solo la regolazione di un paio di puntatori negli elenchi collegati.


8
+1. Così giusto. Se fosse stato così facile ed efficiente "
suddividere

Una di queste operazioni è O (1)?
Chris Redford

2
Immagino che la giunzione dovrebbe essere O (1) per il caso sopra.
chunkyguy

9
È O (1) per a.splice(a.end(), b)e a.splice(a.end(), b, it_b_start), ma è O (n) per a.splice(a.end(), b, it_b_start, it_b_end).
hkBattousai

9
Perché, o perché, STL non poteva supportare solo a.append (b)?
partendo il

-3

un esempio di utilizzo di 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 ); }
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.