【C++】:STL迭代器使用---[容器::iterator iter;]
参考文章:http://blog.csdn.net/qq_23100787/article/details/51388163
迭代器这种东西,就是为了使访问简单!!
容器::iterator iter;
for(iter= 容器.begin();iter!=容器.end();iter++){
cout<<*iter或者是 iter->first等等之类的 //迭代器就是这么个套路
}
然后就是set,set就是一个集合,仅此而已,而其他的,像是map比较有意思,提供了两种数据结构的对应,而其他的我们不要简单的认为是队列和栈,我们要认为这是一种容器,能够包含多种数据结构,用了这种思想,我们就会想的更明白。


[箭头表示左边的迭代器一定满足右边迭代器需要的条件。]
要注意,上面这图表并不是表明它们之间的继承关系:而只是描述了迭代器的种类和接口。处于图表下层的迭代器都是相对于处于图表上层迭代器的扩张集。例如:forward迭代器不但拥有input和output迭代器的所有功能,还拥有更多的功能。比如某个算法需要一个双向迭代器(Bidirctional Iterator),你可以把一个任意存取迭代器(Random Access Iterator)作为参数;但反之不行。


- 能够让迭代器与算法不干扰的相互发展,最后又能无间隙的粘合起来。
- 重载了*,++,==,!=,=运算符。用以操作复杂的数据结构。
- 容器提供迭代器,算法使用迭代器。
- 各个迭代器的功能如下:
迭代器类别 |
说明 |
输入 |
从容器中读取元素。输入迭代器只能一次读入一个元素向前移动,输入迭代器只支持一遍算法,同一个输入迭代器不能两遍遍历一个序列 |
输出 |
向容器中写入元素。输出迭代器只能一次一个元素向前移动。输出迭代器只支持一遍算法,统一输出迭代器不能两次遍历一个序列 |
正向 |
组合输入迭代器和输出迭代器的功能,并保留在容器中的位置 |
双向 |
组合正向迭代器和逆向迭代器的功能,支持多遍算法 |
随机访问 |
组合双向迭代器的功能与直接访问容器中任何元素的功能,即可向前向后跳过任意个元素 |
迭代器的操作:
迭代器 操作 |
说明 |
所有迭代器 |
|
p++ |
后置自增迭代器 |
++p |
前置自增迭代器 |
输入迭代器 |
|
*p |
复引用迭代器,作为右值 |
p=p1 |
将一个迭代器赋给另一个迭代器 |
p==p1 |
比较迭代器的相等性 |
p!=p1 |
比较迭代器的不等性 |
输出迭代器 |
|
*p |
复引用迭代器,作为左值 |
p=p1 |
将一个迭代器赋给另一个迭代器 |
正向迭代器 |
提供输入输出迭代器的所有功能 |
双向迭代器 |
|
--p |
前置自减迭代器 |
p-- |
后置自减迭代器 |
随机迭代器 |
|
p+=i |
将迭代器递增i位 |
p-=i |
将迭代器递减i位 |
p+i |
在p位加i位后的迭代器 |
p-i |
在p位减i位后的迭代器 |
p[i] |
返回p位元素偏离i位的元素引用 |
p<p1 |
如果迭代器p的位置在p1前,返回true,否则返回false |
p<=p1 |
p的位置在p1的前面或同一位置时返回true,否则返回false |
p>p1 |
如果迭代器p的位置在p1后,返回true,否则返回false |
p>=p1 |
p的位置在p1的后面或同一位置时返回true,否则返回false |
只有顺序容器和关联容器支持迭代器遍历,各容器支持的迭代器的类别如下:
容器 |
支持的迭代器类别 |
说明 |
vector |
随机访问 |
一种随机访问的数组类型,提供了对数组元素进行快速随机访问以及在序列尾部进行快速的插入和删除操作的功能。可以再需要的时候修改其自身的大小 |
deque |
随机访问 |
一种随机访问的数组类型,提供了序列两端快速进行插入和删除操作的功能。可以再需要的时候修改其自身的大小 |
list |
双向 |
一种不支持随机访问的数组类型,插入和删除所花费的时间是固定的,与位置无关。 |
set |
双向 |
一种随机存取的容器,其关键字和数据元素是同一个值。所有元素都必须具有惟一值。 |
multiset |
双向 |
一种随机存取的容器,其关键字和数据元素是同一个值。可以包含重复的元素。 |
map |
双向 |
一种包含成对数值的容器,一个值是实际数据值,另一个是用来寻找数据的关键字。一个特定的关键字只能与一个元素关联。 |
multimap |
双向 |
一种包含成对数值的容器,一个值是实际数据值,另一个是用来寻找数据的关键字。一个关键字可以与多个数据元素关联。 |
stack |
不支持 |
适配器容器类型,用vector,deque或list对象创建了一个先进后出容器 |
queue |
不支持 |
适配器容器类型,用deque或list对象创建了一个先进先出容器 |
priority_queue |
不支持 |
适配器容器类型,用vector或deque对象创建了一个排序队列 |
【C++】:STL迭代器使用---[容器::iterator iter;]的更多相关文章
- STL 迭代器适配器(iterator adapter)
iterator adapter graph LR iterator --- reverse_iterator iterator --- Insert_iterator iterator --- io ...
- Python(五) 迭代器(Iterable/Iterator/iter())
原文的链接:http://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42a6d3a2e542c000/00143178254 ...
- STL之list容器的实现框架
说明:本文仅供学习交流,转载请标明出处.欢迎转载! list的底层採用数据结构是环形的双向链表. 相对于vector容器.list容器插入和删除操作付出的代价要比vector容器小得多,可是list带 ...
- STL标准库-容器-vector
技术在于交流.沟通,本文为博主原创文章转载请注明出处并保持作品的完整性. 向量容器vector是一个动态数组,内存连续,它是动态分配内存,且每次扩张的原来的二倍. 他的结构如下 一 定义 vector ...
- 疯子的算法总结(三) STL Ⅱ迭代器(iterator) + 容器
一.迭代器(Iterator) 背景:指针可以用来遍历存储空间连续的数据结构,但是对于存储空间费连续的,就需要寻找一个行为类似指针的类,来对非数组的数据结构进行遍历. 定义:迭代器是一种检查容器内元素 ...
- stl中的容器、迭代器和算法----vector中的find实现
来源 http://blog.csdn.net/huangyimin/article/details/6133650 stl包括容器.迭代器和算法: 容器 用于管理一些相关的数据类型.每种容器都有它的 ...
- C++之STL迭代器(iterator)
[摘要]本文是对STL--迭代器(iterator)的讲解,对学习C++编程技术有所帮助,与大家分享. 原文:http://www.cnblogs.com/qunews/p/3761405.html ...
- STL理论基础、容器、迭代器、算法
一.STL基本概念 STL(Standard Template Library,标准模板库)是惠普实验室开发的一系列软件的统称.现然主要出现在C++中,但在被引入C++之前该技术就已经存在了很长的一段 ...
- STL源码分析-iterator(迭代器)
1. GOF 迭代器设计模式 前面一篇文章有写到stl_list的实现,也实现了一下相应的iterator,但是后面觉得,实现具体容器之前有必要介绍一下iterator(迭代器) .那么迭代器是什么呢 ...
随机推荐
- Linux命令:zip
语法: zip [选项] zip文件 源文件s 选项 全称 含义 举例 -r recursive 递归压缩子目录里的文件(包括子目录里的子目录) zip -r target.z ...
- 转: CSS3 @media 用法总结
一.首先是<meta>标签 <meta name="viewport" content="width=device-width, initial-sca ...
- 何谓domReady
我的博客已经写过好几篇如何实现domReady的文章,最近做培训,面向新手们,需要彻彻底底向他们说明这个东西,于是就有了这篇文章. 我们经常看人们用 document.getElementById(& ...
- Structs复习 ActionMethod
action在执行的是时候 可以不执行excute方法 可以由自己制定 可以在action标签里指定 也可以在方法里动态指定 推荐使用后者 jar包 web.xml <?xml version ...
- swift 头尾式动画
1.0 头尾式动画 UIView.beginAnimations(nil, context: nil) UIView.setAnimationDuration(1.0) // 设置执行动画所需要的时间 ...
- struts2 优缺点
- 内存占用过高 kill 调整mysql内存占用
通过 /var/log/messages 查看 被系统kill掉的进程 如果是自己崩溃会产生 hs_err_ 修改mysql my.cnf innodb_buffer_pool_siz ...
- Springboot 静态资源
说下默认映射的文件夹有: classpath:/META-INF/resources classpath:/resources classpath:/static classpath:/public ...
- new.target
[new.target] The new.target property lets you detect whether a function or constructor was called us ...
- excel表格输入思想
1.创建工作簿 SXSSFWorkbook wb = new SXSSFWorkbook(); //#设置单元格的垂直居中,水平居中,字体颜色 2.创建sheet Sheet sheet = wb ...