迭代器提供对集合(容器)元素的操作能力。迭代器提供的基本操作就是访问和遍历,这构成了迭代器的需求。在C++中,迭代器的需求称为Iterator需求:

  • *r成立
  • ++r成立
  • 一共支持五种迭代器: 输入迭代器(InputIterator)、输出迭代器(OutputIterator)、正向迭代器(ForwardIterator)、双向迭代器(BidirectionalIterator)、随机访问迭代器(RandomAccessIterator)

    别类 属性 有效表达式
    所有类别 支持拷贝构造(Copy-constructible)、拷贝赋值(Copy-assignable)及析构(Destructible) X b(a);
    ​b = a;
    可以递增(Incremented) ++a
    a++
    随机访问 双向 正向 输入 支持等式(Equality)比较或不等式(Inequality)比较 a == b
    a != b
    可以作为右值(Rvalue)而被解引用(Dereferenced) *a
    a->m
    输出 可以作为左值(Lvalue)而被解引用 *a = t
    *a++ = t
      支持默认构造函数(Default-constructible) X a;
    X();
    多道(Multi-pass):解引用(Dereference)及递增(Increment)都不会影响解引用性(Dereferenceability) { b=a; *a++; *b; }
      可以递减(Decremented) --a
    a--
    *a--
      支持算述(Arithmetic)操作符函数 operator+operator- a + n
    n + a
    a - n
    a - b
    支持两个迭代器间的不等式(Inequality)比较 a < b
    a > b
    a <= b
    a >= b
    支持赋值(Assignment)操作符 operator+=operator-= a += n
    a -= n
    支持偏移解引用操作符 operator[] a[n]
  • iterator_traits 为查询迭代器信息提供了统一的接口(Interface)
    input_iterator_tag 这是一个空类,表明迭代器类型为输入迭代器,是一个标签类型(Tag type)
    output_iterator_tag 这是一个空类,表明迭代器类型为输出迭代器,是一个标签类型
    forward_iterator_tag 这是一个空类,表明迭代器类型为正向迭代器,是一个标签类型
    bidirectional_iterator_tag 这是一个空类,表明迭代器类型为双向迭代器,是一个标签类型
    random_access_iterator_tag 这是一个空类,表明迭代器类型为随机访问迭代器,是一个标签类型
    iterator 迭代器类型的基类
  • reverse_iterator 用于逆序遍历的迭代器适配器(Adaptor)
    move_iterator C++11 用于解引用(Dereference)到一个右值引用(Rvalue reference)的迭代器适配器
    make_move_iterator C++11 创建一个 move_iterator
    back_insert_iterator 用于在容器末尾插入元素的迭代器适配器
    back_inserter 创建一个 back_insert
    front_insert_iterator 用于在容器开头插入元素的迭代器适配器
    front_inserter 创建一个 front_insert_iterator
    insert_iterator 用于在容器任意位置插入元素的迭代器适配器
    inserter 创建一个 insert_iterator
  • istream_iterator 用于从 basic_istream 中读取数据的输入(Input)迭代器
    ostream_iterator 用于写入数据到 basic_ostream 的输出(Output)迭代器
    istreambuf_iterator 用于从 basic_streambuf 中读取数据的输入迭代器
    ostreambuf_iterator 用于写入数据到 basic_streambuf 的输出迭代器
  • advance 以指定距离向前移动(Advance)一个迭代器
    distance 返回两个迭代器之间的距离
    next C++11 递增一个迭代器
    prev C++11 递减一个迭代器
  • begin C++11 返回指向容器起始位置的迭代器(iterator)
    cbegin C++14 返回指向容器起始位置的常迭代器(const_iterator)
    end C++11 返回指向容器末尾位置的迭代器
    cend C++14 返回指向容器末尾位置的常迭代器
    rbegin C++14 返回指向容器逆序起始位置的逆序迭代器(reverse_iterator)
    crbegin C++14 返回指向容器逆序起始位置的常逆序迭代器(const_reverse_iterator)
    rend C++14 返回指向容器逆序末尾位置的逆序迭代器
    crend C++14 返回指向容器逆序末尾位置的常逆序迭代器