【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(迭代器) .那么迭代器是什么呢 ...
随机推荐
- 正则表达式(Kotlin)
课题 使用正则表达式匹配字符串 使用正则表达式 "\d{3}-(\d{4})-\d{2}" 匹配字符串 "123-4567-89" 返回匹配结果:'" ...
- Android Studio 版本间区别
2.3.2 ->3.0.1 Gradle版本为4.1 com.android.tools.build:gradle:3.0.x Android Monitor 被换成了 Android P ...
- 11.mysql-权限.md
目录 -- ***********五.mysql权限问题**************** -- mysql数据库权限问题:root :拥有所有权限(可以干任何事情) -- 权限账户,只拥有部分权限(C ...
- ArcGIS案例学习笔记-聚类点的空间统计特征
ArcGIS案例学习笔记-聚类点的空间统计特征 联系方式:谢老师,135-4855-4328,xiexiaokui@qq.com 目的:对于聚集点,根据分组字段case field,计算空间统计特征 ...
- 创建DLL动态链接库——声明导出法
DLL声明导出法:是通过使用__declspec(dllexport),添加到需要导出的函数前,进行声明. 头文件定义如下(OPdll.h): 源文件定义如下(OPdll.cpp): 通过以上两个文件 ...
- 学JS的心路历程-物件与原型(一)
前两天说明面向对象的三大特性及JS不符合面向对象,只能称作支持面向对象而已,今天我们来看看JS的原型继承. 首先我们先来看,什么是原型(vmwork): 两个物件之间的原型关系(prototype r ...
- xshell连接不上linux情况一
设置网络的地址使用桥接方式
- cdnbest如何配置ssl证书
cdnbest添加ssl证书有三种方式: 一.第一种在站点设置中添加: 点打开,加入证书后点提交 可以点检测功能检查证书是否有效,打勾说明证书是有效的 二. 第二种是在域名记录里添加: 如下图点击,添 ...
- CSS实现禁止文字选中
E10平台预览第四版中包含了对 CSS3 新属性 -ms-user-select 的支持,Web 开发人员可以利用这一新属性轻松精确的控制用户可以在网站上选择哪些文本. user-select:non ...
- Avalon Framework
Apache Avalon has closed. Apache Avalon began in 1999 as the Java Apache Server Framework and in lat ...