cara menambahkan objek daftar <T> ke yang lain

94

di C ++, saya memiliki dua list<T>objek Adan Bdan saya ingin menambahkan semua anggota Bke akhir A. Saya telah mencari beberapa sumber berbeda dan belum menemukan solusi sederhana (ei A.append(B);) dan ini sedikit mengejutkan saya.

Apa cara terbaik untuk melakukannya?

Ketika itu terjadi, saya tidak peduli tentang B setelah ini (itu akan dihapus di baris berikutnya) jadi jika ada cara untuk memanfaatkannya untuk kinerja yang lebih baik, saya juga tertarik dengan itu.

BCS
sumber

Jawaban:

195

Jika Anda ingin menambahkan salinan item di B, Anda dapat melakukan:

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

Jika Anda ingin memindahkan item B ke akhir A (mengosongkan B pada saat yang sama), Anda dapat melakukan:

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

Dalam situasi Anda, penyambungan akan lebih baik, karena ini hanya melibatkan penyesuaian beberapa petunjuk dalam daftar yang ditautkan.

UncleBens
sumber
8
+1. Betul sekali. Jika itu bisa sangat mudah dan efisien untuk "memotong" peta dan set ...
paercebal
Apakah salah satu dari operasi ini O (1)?
Chris Redford
2
Saya kira sambungan harus O (1) untuk kasus di atas.
chunkyguy
9
Ini adalah O (1) untuk a.splice(a.end(), b)dan a.splice(a.end(), b, it_b_start), tetapi O (n) untuk a.splice(a.end(), b, it_b_start, it_b_end).
hkBattousai
10
Mengapa, o mengapa, STL tidak dapat mendukung a.append (b) saja?
mulai
-3

salah satu contoh menggunakan 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
sumber