文章目录
迭代器功能
- 一个迭代器需要至少支持两个功能才有用:
- 访问当前元素
*i
- 前缀自增操作
++i (
前缀自增和后缀自增是两个操作符)
- 访问当前元素
- 比较两个迭代器是否指向相同元素
i == j
和i != j
- 访问元素的成员
i->m
- 修改元素
*i = v
- 单向:支持以上,及可以
++
- 双向:支持以上,及可以
--
- 随机的:
- 支持一个偏移量:
i + n
和i - n
- 支持:
i += n
和i -= n
- 支持两个迭代器 :
i - j
- …
…像vector线性且连续存储元素的容器才会提供。
- 支持一个偏移量:
对于一个迭代器类型 T,我们会关心和它相关的如下信息:
- 它是哪种类型的迭代器;
- 它指向的数据类型是什么;
- 这个数据类型的引用类型是什么;
- 这个数据类型的指针类型是什么;
- 两个迭代器的距离用什么类型表示。
- 内置类型就是天然的,对于一个自定义的类模板/class类型,需进行操作符重载。
#include <iterator>
class ArrayIterator {
public:
typedef std::random_access_iterator_tag iterator_category; // 迭代器类型 随机
typedef int value_type; // 数据类型
typedef int& reference_type; // 数据类型的引用
typedef int* pointer_type; // 数据类型的指针
typedef std::ptrdiff_t difference_type; // 距离类型
// 迭代器的实现
};
I am a soldier and I’m marching on
我是一个战士,战士在前进
I am a warrior and this is my song
我是一个勇士,这是勇士之歌
my eyes are steel and my gaze is long
目光似铁,视野无限
I am a warrior and this is my song
我是勇士,这就是勇士之歌