std::move_iterator

来自cppreference.com
< cpp‎ | iterator
定义于头文件 <iterator>
template< class Iterator >
class move_iterator;
(C++11 起)

std::move_iterator 是准确表现为底层迭代器(必须至少是一个输入迭代器 (InputIterator) )的迭代器适配器,除了解引用会将底层迭代器返回的值转换为右值。若此迭代器用作输入迭代器,则效果是值被移动,而非复制。

目录

[编辑] 成员类型

成员类型 定义
iterator_type Iterator
difference_type std::iterator_traits<Iterator>::difference_type
pointer Iterator
value_type std::iterator_traits<Iterator>::value_type
iterator_category std::iterator_traits<Iterator>::iterator_category
reference value_type&& (C++17 前)

std::iterator_traits<Iterator>::reference 是引用,则此为同类型的右值引用版本。否则(譬如若包装迭代器按值返回)此为不更改的 std::iterator_traits<Iterator>::reference (C++17 起)

[编辑] 成员函数

构造新的迭代器适配器
(公开成员函数) [编辑]
赋值另一迭代器
(公开成员函数) [编辑]
访问底层迭代器
(公开成员函数) [编辑]
访问指向的元素
(公开成员函数) [编辑]
按索引访问元素
(公开成员函数) [编辑]
推进或回退迭代器
(公开成员函数) [编辑]

[编辑] 成员对象

成员名称 定义
current (私有成员对象) base() 迭代器的副本,名称仅为说明

[编辑] 非成员函数

比较底层迭代器
(函数模板) [编辑]
令迭代器前进
(函数模板) [编辑]
计算二个迭代器适配器间的距离
(函数模板) [编辑]

[编辑] 示例

#include <iostream>
#include <algorithm>
#include <vector>
#include <iterator>
#include <numeric>
#include <string>
 
int main()
{
    std::vector<std::string> v{"this", "is", "an", "example"};
 
    std::cout << "Old contents of the vector: ";
    for (auto& s : v)
        std::cout << '"' << s << "\" ";
 
    typedef std::vector<std::string>::iterator iter_t;
    std::string concat = std::accumulate(
                             std::move_iterator<iter_t>(v.begin()),
                             std::move_iterator<iter_t>(v.end()),
                             std::string());  // 可用 std::make_move_iterator 简化
 
    std::cout << "\nConcatenated as string: " << concat << '\n'
              << "New contents of the vector: ";
    for (auto& s : v)
        std::cout << '"' << s << "\" ";
    std::cout << '\n';
}

可能的输出:

Old contents of the vector: "this" "is" "an" "example"
Concatenated as string: thisisanexample
New contents of the vector: "" "" "" ""

[编辑] 参阅

创建拥有从参数推出的类型的 std::move_iterator
(函数模板) [编辑]