函数模板
<iterator>

std::make_move_iterator

template <class Iterator>  move_iterator<Iterator> make_move_iterator (const Iterator& it);
template <class Iterator>  move_iterator<Iterator> make_move_iterator (Iterator it);
构造移动迭代器
it 构造一个 move_iterator 对象,

move_iterator 是一个*迭代器适配器*,它适配一个迭代器(it),使得解引用它会产生*右值引用*(如同应用了 std::move),而所有其他操作则保持不变。

参数

it
一个迭代器。
Iterator 是任何类型的 输入迭代器

返回值

一个 move_iterator 等同于 it,但在解引用时会移动。

示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
// make_move_iterator example
#include <iostream>     // std::cout
#include <iterator>     // std::make_move_iterator
#include <vector>       // std::vector
#include <string>       // std::string
#include <algorithm>    // std::copy

int main () {
  std::vector<std::string> foo (3);
  std::vector<std::string> bar {"one","two","three"};

  std::copy ( make_move_iterator(bar.begin()),
              make_move_iterator(bar.end()),
              foo.begin() );

  // bar now contains unspecified values; clear it:
  bar.clear();

  std::cout << "foo:";
  for (std::string& x : foo) std::cout << ' ' << x;
  std::cout << '\n';

  return 0;
}

输出

foo: one two three


数据竞争

访问参数。
请注意,返回的对象可用于访问或修改通过 it 可访问的元素。

异常安全

提供与复制 it 相同的保证级别。

另见