问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

什么是C++的迭代器Interator?

发布网友 发布时间:2022-04-12 13:39

我来回答

1个回答

热心网友 时间:2022-04-12 15:09

容器就是数据结构的泛指,迭代器就是指针的泛指,可以指向元素。容器相当于一个储藏柜,里面装的许多不同的物品就像是储存的元素,比如面包、啤酒、苹果、现金。要取得各个物体就得用与各个物体向匹配的工具,如取出面包要用盘子、取出啤酒要用杯子、取出苹果要用篮子、取出现金要用钱包。迭代器的作用就相当于取出物品的工具的抽象,通过迭代器泛指现实生活中从贮藏室中取出物体的工具。C++迭代器是一种检查容器内元素并遍历元素的数据类型。1 Iterator definitionsIn C++, an iterator is any object that, pointing to some element in a range of elements (such as an array or a container), has the ability to iterate through the elements of that range using a set of operators (at least, the increment (++) and dereference (*) operators).The most obvious form of iterator is a pointer: A pointer can point to elements in an array, and can iterate through them using the increment operator (++). But other forms of iterators exist. For example, each container type (such as a vector) has a specific iterator type designed to iterate through its elements in an efficient way.C++迭代器Interator就是一个指向某种STL对象的指针。通过该指针可以简单方便地遍历所有元素。 C++中的iterator为STL中的重要概念。iterator的概念源自于对遍历一个线性容器工具的抽象,即如何你能访问这个容器的某个元素。对于最简单的数组,当然可以用数组的索引值,因为数组是连续存放在内存中的;但对于链表,就必须用指针。除此之外,还有还有很多种数据结构需要提供一个方便的工具来访问其中的元素,方法有ID,关键字等等。为了统一所有的容器的这种工具的使用,一般提供一整套容器的开发者就会用一种方式来表示各种容器的访问工具。例如C++ STL就是使用iterator。MFC自己的容器使用position。C#和java也有自己的方法,但方法是不变的。 iterator的用法可以被统一,但不同的底层容器实现其iterator的原理是不一样的。例如iterator++你可以理解为移动到容器的下一个元素,如果底层如果是数组,把索引值加一就行;如果底层是链表,就得执行类似于m_pCurrent = m_pCurrent-> pNext;的操作。因此每种容器都有自己的iterator实现方法。C++ STL iterator的常用方法有:iterator++ 移到下个元素iterator-- 移到上个元素*iterator 访问iterator所指元素的值< > == != iterator之间的比较,例如判断哪个元素在前iterator1 + iterator2 iterator之间的加法运算,类似于指针加法 2 容器的 iterator 类型每种容器类型都定义了自己的C++迭代器类型,如 vector:vector::iterator iter;这符语句定义了一个名为 iter 的变量,它的数据类型是 vector 定义的 iterator 类型。每个标准库容器类型都定义了一个名为 iterator 的成员,这里的 iterator 与迭代器实际类型的含义相同。begin 和 end 操作每种容器都定义了一对命名为 begin 和 end 的函数,用于返回迭代器。如果容器中有元素的话,由 begin 返回的迭代器指向第一个元素: vector::iterator iter = ivec.begin();上述语句把 iter 初始化为由名为 vector 操作返回的值。假设 vector 不空,初始化后,iter 即指该元素为ivec[0]。由end 操作返回的C++迭代器指向 vector 的“末端元素的下一个”。“超出末端迭代器”(off-the-end iterator)。表明它指向了一个不存在的元素。如果 vector 为空,begin 返回的迭代器与 end 返回的迭代器相同。由 end 操作返回的迭代器并不指向 vector 中任何实际的元素,相反,它只是起一个哨兵(sentinel)的作用,表示我们已处理完 vector 中所有元素。a)使用迭代器读取vector中的每一个元素vector ivec(10,1);for(vector::iterator iter=ivec.begin();iter!=ivec.end();++iter){*iter=2; //使用 * 访问迭代器所指向的元素}b)const_iterator只能读取容器中的元素,而不能修改for(vector::const_iterator citer=ivec.begin();citer!=ivec.end();citer++){cout
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
体育理念体育理念 有关体育的格言和理念 什么是体育理念 万里挑一算彩礼还是见面礼 绿萝扦插多少天后发芽 绿萝扦插多久发芽 扦插绿萝多久发芽 炖牛排骨的做法和配料 网络诈骗定罪标准揭秘 “流水不争先”是什么意思? 今天妈妈过生日,该怎么祝福她? 妈妈要过生日?不只买什么礼物. 母亲节准备对母亲说点啥? 迅雷主页原有性感图片? 跪求感恩美文。 母亲节就要到了,帮我收集些关于母亲的感人的? 有一个看起来像姐姐的逗比妈妈是什么体验? 母亲节要到了,谁有好的母亲节礼物作文的建议么? 请问谁知道妈妈我爱你的梵文怎么写?最好字体弄大点!如果可以的话!麻烦弄成图片发上来!谢谢 老妈过生日大儿孑不在身边怎么发朋友圈 这个图片上面是什么花?这英文是什么意思? 1000万人民币存到银行一年可以赚多少利息? 一千万人民币存银行,每年能有多少利息 一千万元人民币存到银行的年利息是多少? 移动网络电视机顶盒魔百盒怎么搜索节目啊?更新以后就没有搜索和应用界面了。 移动机顶盒看电视步魔百盒怎么搜索电影?骤 我家用的是移动魔百盒,为什么搜索一些节目搜索不到啊? 取名帮忙 彭堃墀怎么念? 清末陕西提学使余堃的生平事迹(辛亥革命后回四川家乡后的情况)_百度知 ... 玄凤鹦鹉能不能架养? 玄凤鹦鹉能不能架养?求解答 玄凤鹦鹉架养是栓哪里 玄凤鹦鹉该用站架养还是鸟笼养好? 玄凤鹦鹉架养好还是笼养好 玄凤鹦鹉放在车间里养吗 我想养只玄凤鸡尾鹦鹉,想跟他培养感情,有人建议架养。 玄凤鹦鹉放养好,还是笼养好? 玄凤鹦鹉能散养吗 大家觉得玄凤鹦鹉散养好还是笼养好 玄凤鹦鹉怎么养?适合架养吗 玄凤鹦鹉可不可以群养? 玄凤鹦鹉可以群养吗? 玄凤鹦鹉四只(2对)能养一个大笼么,放两个窝行么,能否混养颜色不同?繁殖... 不同种类的玄凤鹦鹉能混养吗? 小牛电动车哪个系列最好 我华为nova3现在的状况是充电时屏幕没有亮,但是呼吸灯一直在闪红灯,开机无反应_百度问一问 美国国会的财政控制权是什么 华为手机充电时,呼吸灯亮四周边框会有淡淡的荧光,呼吸灯不亮时没有,是手机有问题吗? 美国的国会的两个部门的权力各是什么? 美甲双色渐变的步骤?或视频?