bir liste <T> nesnesini diğerine nasıl eklenir


94

C ++ 'da, iki list<T>nesnem var Ave Btüm üyelerini Bsonuna eklemek istiyorum A. Birkaç farklı kaynağı araştırdım ve basit bir çözüm (ei A.append(B);) bulamadım ve bu beni biraz şaşırttı.

Bunu yapmanın en iyi yolu nedir?

Olduğu gibi, bundan sonra B'yi umursamıyorum (sonraki satırda silinir) bu yüzden daha iyi performans için bundan yararlanmanın bir yolu varsa, bununla da ilgileniyorum.

Yanıtlar:


195

B'deki öğelerin kopyalarını eklemek istiyorsanız , şunları yapabilirsiniz:

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

B öğelerini A'nın sonuna taşımak istiyorsanız (aynı anda B'yi boşaltarak), şunları yapabilirsiniz:

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

Sizin durumunuzda ekleme daha iyi olur, çünkü sadece bağlantılı listelerde birkaç işaretçiyi ayarlamayı içerir.


8
+1. Çok doğru. Haritaları ve kümeleri "dilimlemek" bu kadar kolay ve verimli
olsaydı

Bu işlemlerden herhangi biri O (1) midir?
Chris Redford

2
Sanırım yukarıdaki durum için ekleme O (1) olmalıdır.
chunkyguy

9
O (1) a.splice(a.end(), b)ve için a.splice(a.end(), b, it_b_start), ama O (n) için a.splice(a.end(), b, it_b_start, it_b_end).
hkBattousai

10
Neden, o neden STL sadece a.append (b) 'yi destekleyemedi?
srking

-3

boost kullanan bir örnek

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 ); }
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.