7

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

向量提供了 T& 的迭代器 const 向量提供了 const T& 的迭代器 为什么向量&& 不能提供 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 回答