C++标准程序库笔记---迭代器
来源:互联网 发布:遗传算法c 实现 编辑:程序博客网 时间:2024/05/21 17:32
迭代器是一种能够遍历某个序列内所有元素的对象,它可以偷过于一般指针一直的接口来完成自己的工作,迭代器可以作为一种数据结构与算法解耦的手段使用,例如,某一算法可以通过迭代器来对顺序容器或二叉树做相同的操作。
迭代器种类:
迭代器类型能力供应者输入迭代器向前读取istream输出迭代器向前写入ostream,inserter前向迭代器向前读取和写入 双向迭代器向前和向后读取和写入list,set,multiset,map,multimap随机访问迭代器随机存取,可读取也可写入vector,deque,string,array1. 输入迭代器
input迭代器只能一次一个向前读取元素,input跌打器只能读取元素一次。如果复制input迭代器,并使原input迭代器和新产生的副本都向前读取,可能会遍历到不同的值
纯粹input迭代器的一个典型例子就是“从标准输入装置(通常为键盘)读取数据”的迭代器。同一个值不会被读取两次。如果两个input迭代器占用同一个位置,则两者相等。但是,这并不意味着他们存取元素时就会传回相同的值。
表达式效果*iter读取实际元素iter->member读取实际元素的成员++iter向前步进(传回新位置)iter++向前步进(传回旧位置)iter1 == iter2判断两个迭代器是否相等iter1 != iter2判断两个迭代器是否不相等TYPE(iter)复制迭代器(copy构造函数)应该尽可能优先选用前置式递增操作符,因为性能更好,不需要传回旧值,所以也就不必花费一个临时对象来保存旧值。临时变量总是const的,所以后缀表达式不能做左值。2.输出迭代器
output迭代器将元素值一个个写入,只能一个元素一个元素地赋新值,不能用output迭代器对统一序列进行两次遍历。这就好像将元素写到黑洞里,如果在相同位置上对着一个黑洞惊醒第二次写入,不能确保这次写入值会覆盖前一个值
表达式效果*iter = value将数值写到迭代器所指位置++iter向前步进(传回新位置)向前步进iter++向前步进(传回旧位置)TYPE(iter)复制迭代器(copy构造函数)3.前向迭代器
forward迭代器是input迭代器和output迭代器的结合,具有input迭代器的全部功能和output迭代器的大部分功能
表达式效果*iter读取实际元素iter->member读取实际元素的成员++iter向前步进(传回新位置)iter++向前步进(传回旧位置)iter1 == iter2判断两个迭代器是否相等iter1 != iter2判断两个迭代器是否不相等TYPE(iter)复制迭代器(copy构造函数)TYPE()产生迭代器(default构造函数)iter1 = iter2赋值和input迭代器和output迭代器不同,forward迭代器能够多次指向同一群集(collection)中的同一元素, 并能多次处理同一元素output迭代器无需检查是否抵达序列尾端,便可以直接写入数据,output迭代器不提供比较操作,所以不能将output迭代器和尾端迭代器想比较。
对于forward迭代器,必须在提取数据之前确保它有效,否则会发生未定义行为。
4.双向遍历器
Bidirectional迭代器在forward迭代器的基础上增加了回头遍历的能力。支持--iter和iter--操作
5.随机存取迭代器
random access爹哎器在bidirectional迭代器基础之上再增加随机存取能力。因此它必须提供“迭代器算术运算”,也就是说,它能加减某个偏移量、能处理距离问题,并能运用诸如<和>的相互关系运算操作符进行比较。
以下对象和型别支持random access迭代器
- 可随机存取的容器(vector,deque)
- string(字符串,string,wstring)
- 一般array(指针)
迭代器相关辅助函数
advance() 可将迭代器的位置增加,增加的幅度由参数决定,使迭代器一次前进或后退多个元素
#include <iterator>
void advance(InputIterator& pos, Dist n)
advance()并不检查迭代器是否超过序列的end()(因为迭代器通常不知道其所操作的容器,因此无从检查)。所以调用advance()可能导致未定义行为。
此函数总能根据迭代器类型采用最佳方案,这归功于迭代器特征(iterator traits)的运用。对于Random Access迭代器,此函数只是简单地调用pos += n,对于其他任何类型的迭代器,则调用++pos或--pos
- C++标准程序库笔记---迭代器
- C++:标准程序库-STL迭代器Iterator
- C标准程序库头文件
- C++标准程序库学习笔记
- 《STL标准程序库》笔记1
- 《STL标准程序库》笔记2
- 《STL标准程序库》笔记3
- 《STL标准程序库》笔记4
- 《STL标准程序库》笔记5
- 阅读笔记《C++标准程序库》
- 《C++标准程序库STL》笔记
- 【C++】《C++标准程序库》小结七章-迭代器
- 《C++标准程序库》学习笔记(三)迭代器
- C++标准程序库 学习笔记 第七章 迭代器
- C++标准程序库学习笔记(一)
- 《STL标准程序库》笔记6-vector
- 《STL标准程序库》笔记7-deque
- 《STL标准程序库》笔记8-List
- ASO技巧详解(3):截图等因素对ASO的影响
- linux内核移植-移植2.6.35.4内核到s3c2440
- 索引的用法
- 马尔科夫随机场(Markov Random Field)的概念与应用(一)
- 浅谈网站采集与SEO的秘密所在
- C++标准程序库笔记---迭代器
- Java总结(20) 代理
- C++STLSet学习
- Debian Linux使用
- yuv 格式之 Semi Planar和Planar
- POJ 1637 混合图求欧拉回路 最大流实现
- 页面自动操作实现
- Android Launcher研究一(编译Android4.0 launcher 源码 上)
- 把apk文件放到assets文件夹下 自动运行