为什么我们不能移动迭代器?

时间:2013-02-22 16:56:42

标签: c++ c++11 move-semantics

C ++ 11引入了一种“移动”算法,其行为类似于“复制”算法,除了它...移动数据而不是复制它。我想知道为什么委员会没有更新复制算法以使用前向(或者可能除此之外)。

向量提供T&的迭代器。 const向量提供const T&的迭代器。 是否存在矢量&& amp;无法提供T&&amp ;?的迭代器这将允许使用vector的构造函数将元素从列表移动到向量...

这是个坏主意吗?

2 个答案:

答案 0 :(得分:16)

我们已经有了。使用std::make_move_iterator创建一个移动迭代器。

答案 1 :(得分: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