什么是迭代器(iterator)

迭代器(iterator)是一种可以遍历容器元素的数据类型。迭代器是一个变量,相当于容器和操纵容器的算法之间的中介。C++更趋向于使用迭代器而不是数组下标操作,因为标准库为每一种标准容器(如vector、map和list等)定义了一种迭代器类型,而只有少数容器(如vector)支持数组下标操作访问容器元素。可以通过迭代器指向你想访问容器的元素地址,通过*x打印出元素值。这和我们所熟知的指针极其类似。

C语言有指针,指针用起来十分灵活高效。
C++语言有迭代器,迭代器相对于指针而言功能更为丰富。

vector,是数组实现的,也就是说,只要知道数组的首地址,就能访问到后面的元素。所以,我们可以通过访问vector的迭代器来遍历vector容器元素。
List,是链表实现的,我们知道,链表的元素都存储在一段不是连续的地址空间中。我们需要通过next指针来访问下一个元素。那么,我们也可以通过访问list的迭代器来实现遍历list容器元素。

由此可见,迭代器和容器是密不可分的、紧密相连的的关系。不同的容器,它们的迭代器也是不同的,但是它们的迭代器功能是一样的。假如没有迭代器,由于vector和list容器的存储特点,你需要两种算法去实现遍历vector和list容器的功能,复杂且低效。有了迭代器,遍历容器的效率会大大提高。

迭代器(iterator)的使用

容器都有成员begin和end,其中begin成员复制返回指向第一个元素的迭代器(用*迭代器打印出元素值),而end成员返回指向容器尾元素的下一个位置的迭代器,它是一个不存在的元素位置。

所以如果你想遍历容器(vector)元素的话,一般这样写

for( it = vector.begin(); it != vector.end(); it++ )cout<<*it<<endl;

vector容器的迭代器定义

std::vector<int> ::iterator it;     //it能读写vector<int>的元素
std::vector<int>::const_iterator it;//it只能读vector<int>的元素,不可以修改vector<int>中的元素

当然,也可以逆序迭代!

 for( std::vector<int>::reverse_iterator it = v.rbegin(); it!=v.rend();it++ )cout<<*it<<endl;


std::也可以没有,因为前面应经给出来了

using namespace std;

其他容器用法类似!


下面是以vector容器为例的C++代码,仅供参考

#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
int main()
{//要使用的vector容器应该位于所有定义容器语句的最后一句,应在1而不是2 vector<int> c;      //1vector<int> vector;//2vector.push_back(1);//插入尾部 vector.push_back(9);vector.push_back(5); sort(vector.begin(),vector.end());for( int i=0; i<vector.size(); i++ )cout<<"sort_result: "<<vector[i]<<endl;cout<<"头部元素为:"<<vector.front()<<endl;//头部元素 cout<<"尾部元素为:"<<vector.back()<<endl;//尾部元素cout<<"容器尺寸大小为:"<<vector.size()<<endl;//容器尺寸大小vector.front()=11;//修改容器头部元素值 vector.back()= 15;//修改容器尾部元素值cout<<"修改后头部元素为:"<<vector.front()<<endl;//头部元素vector.pop_back();//删除尾部元素cout<<"修改+删除后尾部元素为:"<<vector.back()<<endl;//尾部元素vector.push_back(16);for( int i=0; i<vector.size(); i++ )cout<<"用数组输出vector["<<i<<"]:"<<vector[i]<<endl;std::vector<int>::const_iterator it;for( it = vector.begin(); it != vector.end(); it++ )cout<<"用迭代器输出:"<<*it<<endl;vector.insert(vector.begin(),100);//插入开始位置 for( int i=0; i<vector.size(); i++ )cout<<"insert_result:"<<vector[i]<<endl;cout<<"头部元素为:"<<vector.front()<<endl;return 0;
}

运行结果

sort_result: 1
sort_result: 5
sort_result: 9
头部元素为:1
尾部元素为:9
容器尺寸大小为:3
修改后头部元素为:11
修改+删除后尾部元素为:5
用数组输出vector[0]:11
用数组输出vector[1]:5
用数组输出vector[2]:16
用迭代器输出:11
用迭代器输出:5
用迭代器输出:16
insert_result:100
insert_result:11
insert_result:5
insert_result:16
头部元素为:100--------------------------------
Process exited after 0.02426 seconds with return value 0
请按任意键继续. . .

不同容器的迭代器(iterator)的功能

vector               随机访问
deque                   随机访问
list                    双向
set / multiset          双向
map / multimap          双向
stack                   不支持迭代器
queue                   不支持迭代器
priority_queue          不支持迭代器

C++迭代器(iterator)相关推荐

  1. C++中的迭代器(STL迭代器)iterator

    1.Cpp中的迭代器 要访问顺序容器和关联容器中的元素,需要通过迭代器(iterator)进行.迭代器是一个变量,相当于容器和操纵容器的算法之间的中介.迭代器可以指向容器中的某个元素,通过迭代器就可以 ...

  2. c++迭代器iterator通用吗_「ES6基础」迭代器(iterator)

    迭代器(iterator)是一个结构化的模式,用于从源以一次一个的方式提取数据.迭代器的使用可以极大地简化数据操作,于是ES6也向JS中添加了这个迭代器特性.新的数组方法和新的集合类型(如Set集合与 ...

  3. 如何得到iterator的当前元素_Java中迭代器Iterator详解

    1.定义 Iterator的定义为:对Collection进行迭代的迭代器,Iterator取代了Java Collection Framework中的Enumeration.Iterator与Enu ...

  4. C++ - const 与 迭代器(iterator) 使用 详解

    const 与 迭代器(iterator) 使用 详解 本文地址: http://blog.csdn.net/caroline_wendy/article/details/16030561 迭代器(i ...

  5. java:迭代器Iterator

    迭代器Iterator是一个对象,它的工作是遍历并选择序列中的对象,它提供了一种访问一个容器(container)对象中的各个元素,而不必暴露该对象内部细节的方法. 通过容器的 iterator()方 ...

  6. Java迭代器Iterator接口

    迭代器 Iterator接口 迭代器的代码实现 增强for循环 Iterator接口 java.util.Iterator接口:(对集合进行遍历) 有两个常用方法 1.boolean hasNext( ...

  7. java for 迭代器_Java基础-迭代器Iterator与语法糖for-each

    迭代器Iterator与语法糖for-each 一.为什么需要迭代器 设计模式迭代器 迭代器作用于集合,是用来遍历集合元素的对象.迭代器不是Java独有的,大部分高级语言都提供了迭代器来遍历集合.实际 ...

  8. Python中生成器generator和迭代器Iterator的使用方法

    一.生成器 1. 生成器的定义 把所需要值得计算方法储存起来,不会先直接生成数值,而是等到什么时候使用什么时候生成,每次生成一个,减少计算机占用内存空间 2. 生成器的创建方式 第一种只要把一个列表生 ...

  9. java 迭代器的原理_Java集合框架迭代器Iterator实现原理解析

    使用循环遍历集合 普通for循环 for(int i=0;i<10;i++){} 增强for循环 for(String str:list){} 什么是迭代器Iterator Iterator是J ...

  10. STL源码剖析 迭代器iterator的概念 和 traits编程技法

    iterator模式定义如下:提供一种方法,使之能够依序巡访某个 聚合物(容器)所含的各个元素,而又无需暴露该聚合物的内部表述方式. STL的中心思想在于:将数据容器(containers)和算法(a ...

最新文章

  1. 详解亚马逊:物流为何是电商命脉
  2. 转载:asp.net生成缩略图通用函数(支持多种生成方式)
  3. 我要认真学Git了 - Config
  4. ★_当第二次检测时我的65047777
  5. 2017.7.19 Race 思考记录
  6. 雪城大学信息安全讲义 七、格式化字符串漏洞
  7. 农夫山泉终于“玩砸了”
  8. 稳站大屏 AIoT 时代之巅,创维 Swaiot 生态品牌实现全面布局!
  9. 长春java培训老师
  10. 模型房推荐_【自带水乐园】“巴洛克堡城”酒店,人均200+入住家庭房,乐享下午茶+自行车+游船+萌宠乐园!...
  11. Java课堂作业-------参数求和
  12. 【《离散数学》试卷(A)】离散数学期末考试题——分享篇——题目完善、答案详尽【推荐学习】
  13. 如何根据光学中像差(相位)求出其点扩散函数
  14. 考勤查询统计SQL脚本。
  15. Hexo 关闭文章评论
  16. linux443端口无法建立连接,无法通过端口443连接到ssh
  17. 响应式网页设计学习笔记
  18. rasp 系统_浅谈RASP技术攻防之基础篇
  19. OLED的中英文和图片显示
  20. 操作系统概念v9 Abraham Silberschatz 全文笔记

热门文章

  1. 现在学UI设计有前途吗 如何规划好职业前景
  2. js删除对象属性最简单快速的方法之一
  3. i7-1065g7和i7-10710u的区别哪个好
  4. 如何让你的IDEA变得和艾迪老师的一样酷炫
  5. 奇怪的打印机java
  6. 我们有了新的名字——太魔人(Timers)
  7. MovePrevious和MoveNext的用法
  8. 全网最细Properties详解(自封的)
  9. [英语单词] inside-out
  10. Java实现五子棋小游戏(附思路讲解,全部代码,游戏截图)