2009-01-19 19 views

cevap

81

Neden standart kopya algoritmasını kullanmıyorsunuz ve kullanmıyorsunuz?

std::copy(vector.begin(), vector.end(), std::back_inserter(list)); 
+0

std :: copy yerine stl :: copy olmalıdır, ancak kopyalamak için yineleyicileri kullanırken tercih edilen yöntem budur. – workmad3

0

Örneğin for_each veya copy için, <algorithm> başlığından yanıltıcıdır şeyler kullanmayı deneyebilirsiniz ... ama bence aynı şey anlamına geleceği. Yeni liste yapıyorsanız

+0

for_each aynı olacaktır. Kopya, sağlanan yineleyicilere bağlı olarak çok daha verimli kopyalama mekaniği sağlamak için aşırı yüklenebilir ve genellikle tercih edilen mekanizmadır. – workmad3

56

, sen iterators başlayıp biten alan bir yapıcı yararlanabilir: Eğer eklenecek istediğiniz mevcut listeniz varsa

std::list<SomeType> myList(v.begin(), v.end()); 

Kasprzol cevabı mükemmeldir.

1

Yeni bir liste oluşturmak için bu öneriyi beğeniyorum. Mevcut bir listeye eklenirken, küçük veri kümeleri için aşağıdakiler uygun olabilir. "Optimal" ile, nasıl yapılacağını ve anlaşılması en kolay hatırlamak en kolay olduğunu kastediyorum. (Bunlar o beynin kablolu bağlıdır eminim sübjektif beyanlardır.)

for (unsigned i=0; i<v.size(); i++) myList.push_back(v[i]); 

birçok durumda aşırı bilgiçlik olabilecek vektörler üzerinde yineleyiciler kullanma. Basit indeksleme genellikle iyi çalışır.

Başka bir iş parçacığı iterators vs. dizinlerini (here) adresler. Bu iş parçacığında, alınan cevap temel olarak tercih edilen yineleyicilerdir, çünkü bunlar daha geneldir. Fakat eğer vektörler en yaygın kullanılan konteyner tipi ise, bu tarz bir basit algoritmayı uzmanlaştırmanın makul olduğunu düşünüyorum.

6
list.assign(vector.begin(), vector.end()); 
+0

Bu yardımcıdır, ancak olası bir VLQ bayrağını önlemek için muhtemelen bu cevaba kodsuz bir kod eklemelisiniz. –

İlgili konular