7

C++11 では、データをコピーする代わりに移動することを除いて、「コピー」アルゴリズムのように動作する「移動」アルゴリズムが導入されました。委員会が代わりに (またはおそらくそれに加えて) 転送を使用するようにコピー アルゴリズムを更新しなかった理由を知りたいです。

vector は T& の反復子を提供します const vector は const T& の反復子を提供します vector&& が T&& の反復子を提供できない理由はありますか? これにより、ベクトルのコンストラクターを使用して、たとえばリストからベクトルに要素を移動できます...

それは悪い考えですか?

4

2 に答える 2

16

私たちはすでにそれらを持っています。std::make_move_iterator移動反復子を作成するために使用します。

于 2013-02-22T17:10:57.833 に答える
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
于 2013-02-22T17:13:10.953 に答える