2013-02-22 16 views
7

C++ 11, "kopyalama" algoritması gibi davranan bir "hareket" algoritmasını tanıttı. Komisenin neden ileriye doğru kullanmak için kopya algoritmasını güncellemediğini merak ediyorum (ya da muhtemelen buna ek olarak).Niçin yineleyicileri taşıyamıyorduk?

bir vektör T const vektör & & edemedim bir vektör T & & bir yineleyici sağlamak bir nedeni var mı Kat T & bir yineleyici sağlar & bir yineleyici sağlar? Bu, elemanın vektörün yapıcısını kullanarak bir listeden bir vektöre hareket etmesine izin verir ...

Bu kötü bir fikir mi?

cevap

16

Zaten bunlara sahibiz. Bir hareket yineleyici oluşturmak için std::make_move_iterator kullanın.

+3

Serin, bir şey :) – anonymous

+0

sasha.sochka @ öğrenilen (bunlar artık yararlı iseniz belki sadece bu yorumları kaldırmak?) –

10

Bkz. std::move_iterator.

#include <list> 
#include <vector> 

#include <iostream> 

struct A 
{ 
    A() = default; 
    A(A&&) {std::cout << "move\n";} 
    A(const A&) = default; 
}; 

int main() 
{ 
    std::list<A> l = {A(), A(), A()}; 
    std::vector<A> v(std::make_move_iterator(l.begin()), 
        std::make_move_iterator(l.end())); 
} 

move 
move 
move 
İlgili konular