. 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
cevap
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 veya
assign
ü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
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.
Öyleyse, elemanların bir alt kümesini taşımak istediğinizde * algoritma * ['std :: move'] (http://en.cppreference.com/w/cpp/algorithm/move) var. – Snps
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
Bu, ancak genellikle öğelerin kopyalanması en pahalı kısımdır. – Snps
- 1. Bir <macrodef> karıncada <copy> nasıl?
- 2. ListView.invalidateViews() `ve 'Adapter.notifyDataSetChanged()' arasında bir fark var mı? <code>ListView.invalidateViews()</code> ve <code>Adapter.notifyDataSetChanged()</code> arasında herhangi bir fark
- 3. Paylaşılan_ptr <void>'u paylaşılan_ptr <T>'a yayınlamanın bir yolu var mı?
- 4. `void f (A <I>, tuple <T *...>)` dan daha özel değil (A <0>, tuple <T *...>) `` dır?
- 5. Neden std :: pair <int, taşınır> `, bir [delete]` const & `copy constructor gerektiriyor?
- 6. C++ söz/gelecek: Bir işlevden ne dönecek?</p> <pre><code>std::shared_ptr<std::promise<void>> play(); </code></pre> <p>(Daha fazla bilgi:
- 7. Git, <<<<<<< HEAD dosyasına
- 8. Neden static_cast <Type> (object) nesneyi Type'a kopyalar?
- 9. P (a <= X <= b) değerini görüntülemek için expression() yöntemini almanın bir yolu var mı?
- 10. Pandalar: Subindexing dataframes: bu unsurların bir kopyasını</p> <pre><code>bar = foo.iloc[3:5,1:4] </code></pre> <p><code>bar</code> yapar tutun: görünümleri
- 11. <script><!--//--></script> Modern bir amacı var mı?
- 12. myCollection.Where (...) arasında bir performans farkı var mı? FirstOrDefault() ve myCollection.FirstOrDefault (...)
- 13. Bir std :: vektör <std :: unique_ptr < int>> mülkünün
- 14. Tanımlanmamış şablonun örtük bir örneği 'std :: basic_string <char, std :: char_traits <char>, std :: ayırıcı <char>>'
- 15. <a> etiketi
- 16. genel bir IEnumerable döndürüyor <T>
- 17. std :: vector <std :: unique_ptr hatası < T >>
- 18. SFINAE: Derleyici Bir <a href="http://en.wikipedia.org/wiki/Substitution_failure_is_not_an_error" rel="noreferrer">SFINAE</a> sorun var
- 19. I usul-A içerisinde bir koşulu ile birden çok yöntem adlı bir <code>method-A()</code>,</p> <p>sahip doğrulama
- 20. Nant <copy> ve dizin yapısını
- 21. Windows'ta komut satırında foreach döngüsü? Şimdi olmayan yinelemeli A'da mevcut B tüm dosyaları silmek istiyorum</p> <pre><code>copy A\* B\ </code></pre> <p>:
- 22. Listedeki bir çiftin her iki öğesinin bir işlevini liste anlamadan daha iyi bir yolu var mı? Bunu yapmak için daha iyi bir yolu</p> <pre><code>a' = [ (f x, f y) | (x, y) <- a ] </code></pre> <p>var mı:
- 23. başka std içine std :: fonksiyonu hareketli :: fonksiyon Ben kopyalanan/inşa zaman bir mesaj yazdıran bir sınıf <code>A</code> var
- 24. Bir <code>LinearLayoutManager</code> ile <code>RecyclerView</code> var
- 25. Sözlük <> bir IEnumerable <> kaynağı ile doldurma</ a0><a1></ a1>
- 26. XPath - tüm elemanlar alt elemanlara belge</p> <pre><code><a> <b> <c/> <d/> </b> <b> <c/> <d/> </b> </a> </code></pre> <p>Verilen
- 27. <bahar: url /> bir <a> etiketi ile nasıl kullanılır?
- 28. Neden std :: işlevi C stili değişken işlevlere bağlanamıyor?</p> gcc ile <p><code>std::function<decltype(printf)> my_printf(printf);</code></p> <p>, hata mesajı okur: Örneğin:
- 29. Thymeleaf'ın JSP etiketleri gibi bir şeyleri var mı?</p> <p><strong><em>ChildPage.jsp</em></strong>:
- 30. Akış çıkışında <yerine <neden hala <çoğum?
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. –