Vektörü bir yineleyici kullanarak yinelemek ve en uygun kopyalama yöntemini bir listeye kopyalamak. Herhangi bir tavsiye?Bir vektörün STL'de bir listeye kopyalanmasının en iyi yolu?
cevap
Neden standart kopya algoritmasını kullanmıyorsunuz ve kullanmıyorsunuz?
std::copy(vector.begin(), vector.end(), std::back_inserter(list));
Ö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
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
, 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.
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.
list.assign(vector.begin(), vector.end());
Bu yardımcıdır, ancak olası bir VLQ bayrağını önlemek için muhtemelen bu cevaba kodsuz bir kod eklemelisiniz. –
- 1. KnockoutJS'de bir gözlemleme aracının kopyalanmasının/kopyalanmasının en iyi yolu nedir?
- 2. Yineleyiciyi bir listeye dönüştürmenin en hızlı yolu
- 3. Bir "araç turu" sağlamanın en iyi yolu
- 4. Bir animasyonu sürmenin en iyi yolu nedir?
- 5. Javascript'te bir int ayrıştırmanın en iyi yolu
- 6. MongoEngine'de bir DictField'ı sorgulamanın en iyi yolu
- 7. Jmeter'da en iyi yolu bulmanın en iyi yolu nedir?
- 8. en iyi yolu?
- 9. en iyi yolu
- 10. en iyi yolu
- 11. Bir kullanıcının Matlab'da bir tamsayı girmesini zorlaştırmanın en iyi yolu
- 12. Rust'ta bir yineleyiciden bir dilimi doldurmanın en iyi yolu nedir?
- 13. ReactJS'de bir dizideki bir nesneyi güncellemenin en iyi yolu nedir?
- 14. Spree'yi özelleştirmenin en iyi yolu?
- 15. Bir vektörün bir Rcpp :: List
- 16. Linq'e katılmanın en iyi yolu
- 17. Bir vektörün içeriğini basamıyorum?
- 18. Java 8 Başka bir Listeye geri dönen bir Listeye Lambda uygulamanın deyimsel yolu?
- 19. Swift'de bir UIColor'u onaltılı (web rengi) haline getirmenin en iyi/en iyi yolu nedir?
- 20. Etiketleri bir sql sunucu tablosunda depolamanın en iyi yolu?
- 21. Karmaşık bir NSCompoundPredicate oluşturmanın en iyi yolu nedir?
- 22. Bir gui'de rsync ilerlemesini sarmanın en iyi yolu?
- 23. VBA'dan bir seri bağlantı noktasına erişmenin en iyi yolu nedir?
- 24. Hız içinde bir diziye erişmenin en iyi yolu nedir?
- 25. İki değeri bir yöntemden döndürmenin en iyi yolu nedir?
- 26. Bir WinRT Uygulaması için Ayarları Tutmanın En İyi Yolu?
- 27. Bir resmi HTML'de kırpmanın en iyi yolu nedir?
- 28. jSON'un WCF'de bir .NET DataTable serileştirmesinin en iyi yolu nedir?
- 29. n düğümlerini tek bir düğüme bağlamanın en iyi yolu?
- 30. Javascript yoluyla bir url değiştirmenin en iyi yolu nedir?
std :: copy yerine stl :: copy olmalıdır, ancak kopyalamak için yineleyicileri kullanırken tercih edilen yöntem budur. – workmad3