2013-02-22 11 views
7

C++ 11 wprowadził algorytm "przesuwania", który zachowuje się jak algorytm "kopiuj", z tym wyjątkiem, że ... przesuwa dane zamiast je kopiować. Zastanawiam się, dlaczego komenda nie zaktualizowała algorytmu kopiowania, aby zamiast tego użyć forward (lub prawdopodobnie dodatkowo).Dlaczego nie mogliśmy przenosić iteratorów?

Wektor zapewnia iterator z T & const vector zapewnia iterator const T & Czy istnieje powód, dla którego wektor & & kulisy stanowić iterator z T & &? To pozwoliłoby przenieść elementy z listy do wektora za pomocą konstruktora wektorowego ...

Czy to zły pomysł?

Odpowiedz

16

Mamy już takie. Użyj std::make_move_iterator, aby utworzyć iterator ruchu.

+3

Cool, nauczyłem się czegoś :) – anonymous

+0

@ sasha.sochka (może po prostu usunąć te komentarze, jeśli nie jesteś już przydatna?) –

10

Zobacz 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 
Powiązane problemy