2014-11-04 6 views
9

. Ancak, değer türü her iki kapsayıcı için de aynıysa, std::copy yerine kopya oluşturucuyu kullanmam sorun olur mu?std :: copy ile kapsayıcının kopya kurucusu arasında herhangi bir performans farkı var mı? Farklı bir değer tipinde kapları (örneğin, <code>std::vector<float></code>'dan <code>std::vector::<double></code>'a kopyalar) taşıyabildiğinden, daha genel bir yaklaşımdır

+0

std :: kopyanın önkoşulları var (örn .: hedef aralığın geçerli olduğu). Bir konteynerin diğerine devri, bu önkoşulları ima etmez. Aslında karşılaştırılabilir olmayan farklı kullanım durumlarını karşılaştırırsınız. –

cevap

15

Performans konusunda endişelenmeyin, hepsi çok yakın olmalılar. Bunun yerine:

  • Kopyanın bulunduğu yeni bir kapsayıcı oluşturuyorsanız, kopya yapıcıyı veya iki yineleyici kurucuyu kullanın (farklı öğe türleri varsa).
  • Varolan bir kapsayıcıyı değiştiriyorsanız (atama), uygun atama işleci veyaassign üye kullanın.
  • Öğelerin bir alt kümesini değiştiriyorsanız, std::copy'u kullanın.

doğru yapmanız çalıştığınız şeyi temsil ederek, derleyici kodunu (o varolan bir kapta doğrudan inşa örneğin bellek hakkında tam olarak hakkını önceden tahsis) optimize etmek için en olası bilgi vermek . Eğer hareket yapıcısı ziyade kopya kurucu (çağırmak mümkün bir durum olduğunda

0

biri potansiyel olarak önemli fark, örneğin zaman dan inşa böyle bir fonksiyonun dönüş değeri olarak, bir rvalue olduğunu kopya nesne). Böyle bir durumunuz varsa, std :: copy komutunu kullanmaktan ziyade atama yapmak veya taşımak için harekete geçmenizden kesinlikle emin olmak istersiniz.

Temel olarak bu Mark B'nin tavsiyelerini takip etmenin başka bir nedenidir.

+0

Öyleyse, elemanların bir alt kümesini taşımak istediğinizde * algoritma * ['std :: move'] (http://en.cppreference.com/w/cpp/algorithm/move) var. – Snps

+0

std :: move'in bir vektörün öğeleri üzerinde hareket ettirilmesi, vektörün kendisini atamak/taşımak için hareket ile aynı değildir. Çok daha pahalı olabilir. – mattnewport

+0

Bu, ancak genellikle öğelerin kopyalanması en pahalı kısımdır. – Snps

İlgili konular