STL之重识vector迭代器
在学习了STL的算法后, 根据在算法的源代码中学到的东西, 重新认识一下迭代器
复习迭代器
分类
输入迭代器 InputIterator
- 只读,一次传递
- 一个输入迭代器仅能对它所选择的每个元素进行一次解析, 它们只能向前移动.
- 定义了一个超越末尾的值作为结尾.
支持运算符:
- val = *iter;(解引用)
- val = iter->val;(间接访问)
- iter++, ++iter(前移)
- iter1 == iter2(等于)
- iter1 != iter2(不等于)
输出迭代器 OutputIterator
- 只写,一次传递
- 只能对每个写出的值进行一次解析, 并且只能向前移动.
支持运算符:
- *iter = val;(解引用) 要注意iter里面的元素的 深/浅 拷贝问题
- iter++, ++iter(前移)
前向迭代器
- 前向迭代器包含了
输入和输出迭代器两者的功能 - 可以多次解析一个迭代器指定的位置
- 可以对一个值进行多次读/写
- 前向迭代器只能向前移动(单向遍历)
支持的运算符:
- iter++, ++iter(前移)
- iter1 == iter2(等于)
- iter1 != iter2(不等于)
- 前向迭代器包含了
双向迭代器
- 具有
前向迭代器的全部功能 - 可以利用自减操作符operator--向后一次移动一个位置
支持的运算符:
- iter1 == iter2(等于)
- iter1 != iter2(不等于)
- iter--, --iter(后移)
- iter++, ++iter(前移)
- 具有
随机访问迭代器
- 具有
双向迭代器的所有功能 - 拥有
指针的大部分功能 - 可以像一个指针那样可以进行操作
- 可使用操作符operator[]
支持的运算符:
- iter++, ++iter(前移)
- iter--, --iter(后移)
- iter += 5;(前移N位)
- iter -= 5;(后移N位)
- iter[5];(直接访问)
- iter1 > iter2(大于)
- iter1 >= iter2(大于等于)
- iter1 < iter2(小于)
- iter1 <= iter2(小于等于)
- 具有
C++标准库
STL
- 分配器 --> 为所有的容器分配内存
- 容器 --> 按规则存储数据
- 迭代器 --> 指向容器中的元素
- 算法 --> 通过迭代器进行运算
- C标准库
vector迭代器
每个容器内, 都有大量 typedef 定义, 它们具有相同的类型名.
这样形成了一种完全解耦的统一
- vector的迭代器是 随机访问迭代器
- vector的 _Vector_iterator 继承自 _Vector_const_iterator
分析过程见: 传送门
未完待续...
如有错误,请提出指正!谢谢.
本文由 花心胡萝卜 创作,采用 知识共享署名4.0 国际许可协议进行许可
本站文章除注明转载/出处外,均为本站原创或翻译,转载前请务必署名
最后编辑时间为: 2017-04-20 at 03:07 pm