一、什么是迭代器
迭代器是一种检查容器内元素并遍历元素的数据类型。
容器提供了begin 和 end 接口,每种容器都定义了自己的迭代器类型
二、定义与初始化
vector<int> ivec;
vector<int>::iterator iter1=ivec.bengin(); //将迭代器iter1初始化为指向ivec容器的第一个元素
vector<int>::iterator iter2=ivec.end(); //将迭代器iter2初始化为指向ivec容器的最后一个元素的下一个位置
三、常用操作
(1)*iter //对iter进行解引用,返回迭代器iter指向的元素的引用
(2)iter->men //对iter进行解引用,获取指定元素中名为men的成员。等效于(*iter).men
(3)++iter //给iter加1,使其指向容器的下一个元素
(4)–iter //给iter减1,使其指向容器的前一个元素
(5)iter1==iter2 //比较两个迭代器是否相等,当它们指向同一个容器的同一个元素或者都指向同同一个容器的超出末端的下一个位置时,它们相等
四、const_iterator 迭代器
每种容器还定义了一种名为const_iterator的类型。该类型的迭代器只能读取容器中的元素,不能用于改变其值。之前的例子中,普通的迭代器可以对容器中的元素进行解引用并修改,而const_iterator类型的迭代器只能用于读不能进行重写。
const_iterator和const iterator是不一样的,后者对迭代器进行声明时,必须对迭代器进行初始化,并且一旦初始化后就不能修改其值。
五、迭代器失效
由于一些对容器的操作如删除元素或移动元素等会修改容器的内在状态,这会使得原本指向被移动元素的迭代器失效,也可能同时使其他迭代器失效。使用无效的迭代器是没有定义的,可能会导致和使用悬垂指针相同的问题。所以在使用迭代器编写程序时,需要特别留意哪些操作会使迭代器失效。使用无效迭代器会导致严重的运行时错误。