命名空间
变体
操作

std::iterator

来自 cppreference.cn
 
 
迭代器库
迭代器概念
迭代器原语
算法概念与工具
间接可调用概念
常用算法要求
工具
迭代器适配器
 
定义于头文件 <iterator>
template<

    class Category, (类别)
    class T, (类型T)
    class Distance = std::ptrdiff_t, (距离)
    class Pointer = T*, (指针)
    class Reference = T& (引用)

> struct iterator;
(C++17 中已弃用)

std::iterator 是一个基类,用于简化迭代器所需类型的定义。

目录

[编辑] 模板参数

分类 - 迭代器的类别。必须是迭代器类别标签之一。
T - 通过解引用迭代器可获得的值的类型。对于输出迭代器,此类型应为void
Distance - 可用于标识迭代器之间距离的类型
指针 - 定义指向所迭代类型(T)的指针
引用 - 定义对所迭代类型(T)的引用

[编辑] 成员类型

成员类型 定义
iterator_category(迭代器类别) 分类
value_type(值类型) T
difference_type(差值类型) Distance
pointer(指针) 指针
reference(引用) 引用

[编辑] 示例

以下示例展示了如何通过继承自 std::iterator 来实现一个输入迭代器

#include <algorithm>
#include <iostream>
 
template<long FROM, long TO>
class Range
{
public:
    // member typedefs provided through inheriting from std::iterator
    class iterator : public std::iterator<
                                std::input_iterator_tag, // iterator_category
                                long,                    // value_type
                                long,                    // difference_type
                                const long*,             // pointer
                                long                     // reference
                            > {
        long num = FROM;
    public:
        explicit iterator(long _num = 0) : num(_num) {}
        iterator& operator++() { num = TO >= FROM ? num + 1: num - 1; return *this; }
        iterator operator++(int) { iterator retval = *this; ++(*this); return retval; }
        bool operator==(iterator other) const { return num == other.num; }
        bool operator!=(iterator other) const { return !(*this == other); }
        reference operator*() const { return num; }
    };
    iterator begin() { return iterator(FROM); }
    iterator end() { return iterator(TO >= FROM? TO + 1 : TO - 1); }
};
 
int main()
{
    // std::find requires an input iterator
    auto range = Range<15, 25>();
    auto itr = std::find(range.begin(), range.end(), 18);
    std::cout << *itr << '\n'; // 18
 
    // Range::iterator also satisfies range-based for requirements
    for (long l : Range<3, 5>())
        std::cout << l << ' '; // 3 4 5
    std::cout << '\n';
}

输出

18
3 4 5

[编辑] 另请参阅

提供迭代器属性的统一接口
(类模板) [编辑]
用于指示迭代器类别的空类类型
(类) [编辑]
English Deutsch 日本語 中文(简体) 中文(繁體)