2013-02-22 3 views
7

C++ 11では、 "コピー"アルゴリズムのように動作する「移動」アルゴリズムが導入されました。ただし、データをコピーするのではなく移動します。私は、委員会がコピーアルゴリズムを代わりに(あるいはそれに加えて)フォワードを使用するように更新しなかったのはなぜだろうかと思います。なぜイテレータを動かすことができませんでしたか?

ベクトルはT constのベクトルが& &がcouldntのベクトルがT & &のイテレータを提供する理由はありconstのT & のイテレータを提供& のイテレータを提供しますか?それはベクトルのコンストラクタを使ってリストからベクトルに要素を移動することを可能にします...

それは悪い考えですか?

答えて

16

これは既にあります。移動イテレータを作成するには、std::make_move_iteratorを使用します。

+3

クール、私は何か:) – anonymous

+0

sasha.sochka @を学んだ(彼らはもはや有益なら多分ちょうどそれらのコメントを削除していません?) –

10

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 
関連する問題