- 迭代器功能
- 一个迭代器需要至少支持两个功能才有用:
- 访问当前元素 *i
- 前缀自增操作 ++i (前缀自增和后缀自增是两个操作符)
- 比较两个迭代器是否指向相同元素 i == j 和 i != j
- 访问元素的成员 i->m
- 修改元素 *i = v
- 单向:支持以上,及可以++
- 双向:支持以上,及可以--
- 随机的:
- 支持一个偏移量: i + n 和 i - n
- 支持:i += n 和 i -= n
- 支持两个迭代器 :i - j
- …
…像vector线性且连续存储元素的容器才会提供。
对于一个迭代器类型 T,我们会关心和它相关的如下信息:
- 它是哪种类型的迭代器;
- 它指向的数据类型是什么;
- 这个数据类型的引用类型是什么;
- 这个数据类型的指针类型是什么;
- 两个迭代器的距离用什么类型表示。
- 内置类型就是天然的,对于一个自定义的类模板/class类型,需进行操作符重载。
#includeclass 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
我是勇士,这就是勇士之歌



