迭代器知识整理

Posted cs0915

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了迭代器知识整理相关的知识,希望对你有一定的参考价值。

对数组的访问可以使用下标运算符,对链表的访问可以使用指针,对容器对象的访问使用到一种更为通用的机制,迭代器(iterator)。所有的标准库容器都可以使用迭代器,类似于指针,迭代器可以访问某个元素,可以从一个元素移动到一个元素,迭代器有有效与无效之分。

使用迭代器

auto b=v.begin(),e=v.end();

begin负责返回指向容器第一个元素的迭代器,即b是指向容器v的第一个元素的迭代器,迭代器的类型不确定,用auto表示,即让编译器自己确定迭代器的类型;end负责返回指向容器尾元素的下一位置的迭代器,即指向的是一个不存在的“尾后”元素,返回的迭代器称为“尾后迭代器”。特俗情况下,如果容器为空,则begin和end返回的是同一个迭代器。

迭代器运算符

使用==和!=来两个比较迭代器是否相等,若两个迭代器指向的元素相同或者都是一个额容器的尾后迭代器,则相等,否则就说不相等。

//iter是迭代器
*iter;//返回迭代器iter所指向元素的引用
iter->mem;//相当于(*iter).mem,访问所指向元素的mem成员
++iter;//指向容器的下一元素
--iter;//指向容器的上一元素

注意:end返回的迭代器并不指向实际的某个元素,所以不能对其进行递增或解引用操作。

迭代器类型

一般来说我们并不知道(也无需知道)迭代器的精确类型。实际上,那些拥有迭代器的标准库类型使用iterator和const_iterator来表示迭代器的类型

vector<int>::iterator it;//表示迭代器it的数据类型是vector<int>定义的iterator类型,it指向的元素可读可写
vector<int>::const_iterator it2;//it2只能读元素,不能写元素

某些对vector对象的操作会使迭代器失效

但凡使用了迭代器的循环体,都不要向迭代器所属的容器添加元素。比如对于vector,push_back操作向容器中添加元素,会使该vector对象的迭代器失效。

迭代器运算

//iter是迭代器
iter+n;//n为整数,迭代器加上一个整数仍是一个迭代器,位置向前移动n
iter-n;//迭代器位置向后移动n
iter1-iter2;//两个迭代器相减是它们的距离,可正可负
>,>=,<,<=;//比较两个迭代器的前后位置关系

 

以上是关于迭代器知识整理的主要内容,如果未能解决你的问题,请参考以下文章

VS2015 代码片段整理

生成器知识点整理

优达学城数据分析师纳米学位——P3项目知识点整理及代码分析 练习:迭代解析

java知识整理-----集合

Python的迭代器与生成器

Unity中HLSL代码块的基本知识归纳整理