C++标准库类型——迭代器_bear_n的博客-程序员宅基地

技术标签: iterator  c++  C++标准库知识  

C++标准库类型——迭代器

基础介绍

​ 迭代器提供对一个容器中的对象的访问方法,并且定义了容器中对象的范围。

​ 迭代器就如同一个指针。事实上,C++的指针也是一种迭代器。但是,迭代器不仅仅是指针,因此你不能认为它们一定具有地址值。例如,一个数组索引,也可以认为是一种迭代器。

​ 除了使用下标来访问 vector 对象的元素外,标准库还提供了另一种访问元素的方法:使用迭代(iterator)

​ 迭代器是一种检查容器内元素并遍历元素的数据类型。

​ 标准库为每一种标准容器(包括vector)定义了一种迭代器类型。迭代器类型提供了比下标操作更通用化的方法:所有的标准库容器都定义了相应的迭代器类型,而只有少数的容器支持下标操作。因为迭代器对所有的容器都适用,现代 C++ 程序更倾向于使用迭代器而不是下标操作访问容器元素,即使对支持下标操作的vector 类型也是这样。

容器的iterator 类型

​ 每种容器类型都定义了自己的迭代器类型,如vector

 vector<int>::iterator iter;

​ 语句定义了一个名为 iter 的变量,它的数据类型是 vector<int > 定义的 iterator 类型。每个标准库容器类型都定义了一个名为 iterator 的成员,这里的 iterator 与迭代器实际类型的含义相同。

术语:迭代器和迭代器类型

​ 程序员首次遇到有关迭代器的术语时可能会困惑不解,原因之一是由于同一个术语 iterator 往往表示两个不同的事物。一般意义上指的是迭代器的概念;而具体而言时指的则是由容器定义的具体的 iterator 类型,如 vector<int>

​ 重点要理解的是,有许多用作迭代器的类型,这些类型在概念上是相关的。若一种类型支持一组确定的操作(这些操作可用来遍历容器内的元素,并访问这些元素的值),我们就称这种类型为迭代器。

​ 各容器类都定义了自己的 iterator类型,用于访问容器内的元素。换句话说,每个容器都定义了一个名为 iterator 的类型,而这种类型支持(概念上的)迭代器的各种操作。

begin 和 end 操作

​ 每种容器都定义了一对命名为 beginend 的函数,用于返回迭代器。如果容器中有元素的话,由 begin 返回的迭代器指向第一个元素:

 vector<int>::iterator iter =ivec.begin();

​ 上述语句把 iter 初始化为由名为 vector 操作返回的值。假设 vector 不空,初始化后,iter 即指该元素为 ivec[0]

​ 由 end 操作返回的迭代器指向 vector 的“末端元素的下一个”。“超出末端迭代器”(off-the-enditerator)。表明它指向了一个不存在的元素。如果 vector 为空,begin 返回的迭代器与 end 返回的迭代器相同。

<
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/bear_n/article/details/71036302

智能推荐

也许是得益于快播案,电子证物的程序正义问题终于有了保障-程序员宅基地

9月20号,最高人民法院、最高人民检察院、公安部印发了《关于办理刑事案件收集提取和审查判断电子数据若干问题的规定》的通知,这项规定从2016年10月1日开始实施,也就是今天。由于《规定》中提及“网页、博客、微博客、朋友圈、贴吧、网盘等网络平台发布的信息”可也是电子数据的一部分,被网友戏谑解读为“你有权保持缄默,但你在朋友圈和微博所发布的一切都...

SpringCloud Gateway Security oauth2.0 搭建微服务统一认证授权_gateway security-程序员宅基地

1 概述SpringCloud Gateway Security oauth2.0 搭建微服务统一认证授权。项目概述:common:公用代码,实体、工具类等等…gateway:网关uaa:用户登录认证服务school:微服务环境概述:SpringBoot 版本:2.3.1.RELEASESpringCloud版本:Hoxton.SR6SpringCloudAlibaba:2.2.1.RELEASEMybatisPlus:3.3.2技能要求:需要掌握SpringCloud 、_gateway security

XBMC使用MySQL做资料库-程序员宅基地

2019独角兽企业重金招聘Python工程师标准>>> ..._使用数据库管理koid

pcntl_fork 与 for循环合用_php pcntl循环-程序员宅基地

linux脚本后台化方式php task.php &nohup php task.php &fork 和 setsid *nix解决方案php多线程与进程1.使用线程安全版本ZTS2. 安装pecl的 【pthread扩展】额外php多进程需要在安装PHP的时候开启pcntl不要在apache或者fpm环境下使用php多进程进程是程序执行的实例php多进程..._php pcntl循环

抖音程序员向女友表白小程序源码及程序包_程序员的表白小程序下载-程序员宅基地

抖音程序员向女友表白小程序源码及程序包效果:import sysfrom PyQt5 import QtWidgetsfrom PyQt5.QtGui import QFont, QIcon # QtWidgets不包含QFont必须调用QtGuifrom PyQt5 import QtGui, QtCoreimport randomclass MessageBox(QtWidgets.QWidget): # 继承自父类QtWidgets.QWidget Clos_程序员的表白小程序下载

对于单链表结构体中LinkList以及Lnode,*LinkList两种不同定义方式的个人理解_linklist*和*linklist-程序员宅基地

在学习数据结构时,我们可以看到不同的书籍或者不同的人对于单链表结构体的定义是不一样的。大致分为下面两种第一种_linklist*和*linklist

随便推点

matlab符号计算证明sin,matlab的符号计算_Min Xu的博客-程序员宅基地

1、符号表达式的生成符号表达式包括符号函数和符号方程,它有两种生成方式:(1)符号表达式在matlab内部表示为字符串。如sin、diff等。不推荐使用(2)使用sym、syms函数建立符号表达式>> f=sym('sin(x)')f =sin(x)>> f=sym('sin(x)^2=0')f =sin(x)^2 == 0>> syms x>> f..._matlab化简表达式sin

java实现RDD算子-程序员宅基地

spark基础与java api介绍http://www.cnblogs.com/tovin/p/3832405.html textFile: 可将本地文件或HDFS文件转换成RDD,读取本地文件需要各节点上都存在,或者通过网络共享该文件 JavaRDD lines =

【持续更新】影视资源采集站 影视站长必备全部资料整理_站长们最帅最有钱的博客-程序员宅基地

影视资源采集站:飞速资源:http://feisuzy.com (更新块、CDN秒播、稳定) 共有资源50000+备用网址:http://fszy1.com天空资源:http://tiankongzy.com (更新块、CDN秒播、稳定) 共有资源60000+备用网址:http://tkzy1.com----------以上为优质资源,推荐站长采集-------------------极快资源网 https://www.jikzy.com 共有资源24300...

细说Web API中的Blob-程序员宅基地

在一般的Web开发中,很少会用到Blob,但Blob可以满足一些场景下的特殊需求。Blob,Binary Large Object的缩写,代表二进制类型的大对象。Blob的概念在一些数据库中有使用到,例如,MYSQL中的BLOB类型就表示二进制数据的容器。在Web中,Blob类型的对象表示不可变的类似文件对象的原始数据,通俗点说,就是Bl...

浅析axios及封装方法_axios 封装-程序员宅基地

一、axios是什么axios是一个轻量的HTTP客户端基于XMLHttpRequest服务来执行HTTP请求,支持丰富的配置,支持Promise,支持浏览器端和Node.js端。自Vue2.0起,尤大宣布取消对vue-resource的官方推荐,转而推荐axios。现在axios已经成为大部分Vue开发者的首选特性 从浏览器中创建XMLHttpRequests 从node.js创建http请求 支持PromiseAPI..._axios 封装

NuGet使用方法-程序员宅基地

如果你使用过VS2010.net,那么你应该知道2010中有个插件管理器,可以在插件管理器中添加NuGet,那么NuGet有什么用?他可以你每个版本的程序打包,每个版本的程序引用了那个组件,组件是什么版本,他都准确的记录在打包的文件中,以备下次引用时一起插入到项目中。像我们原来把一些组件插入到项目中时,都是把一些引用的文件插入引用N次才能正常使用,有他了,你只需要在PM中输入 Instal...