迭代器(iterator)
介绍:
①迭代器可以看作是容器内置的指针,通过迭代器可以获得容器的某个元素的引用,(这里只是类比,迭代器和指针不是一个类型)
②容器提供了内置的迭代器操作方法.begin()和.end()成员函数。
begin()成员:返回容器第一个元素的迭代器;
end()成员:返回容器的尾后迭代器,即指向尾元素的下一个位置(一个不存在的元素)
③迭代器的定义和初始化:
很多容器都支持迭代器类型,如String类型,vector类型。
迭代器定义:
string::iterator iter1; //定义一个string 类型容器的迭代器
vector<int>::iterator iter2; //定义一个int型vector容器的迭代器
迭代器的初始化:
string s="wode"; //先定义一个string容器
vector<int> vec(10,1); //先定义一个vector<int>容器
iter1=s.begin(); //返回字符串对象s的第一个元素的迭代器
iter2=vec.begin() //返回容器vec的第一个元素的迭代器
④迭代器的操作
*iter:表示对容器中iter所指向的元素的引用
iter->men:表示对容器中iter所指向的元素的成员men的引用,即容器的元素是对象类型或结构体,该语句等同于(*iter).men
iter++:迭代器指示容器下一个元素(尾后迭代器除外)
iter-- : 迭代器指示容器的上一个元素
iter1=iter2
iter1!=iter2 :两个迭代器指向同一个元素,则这两个迭代器相等,否则不相等。
iter+i:迭代器往后移动i个元素位置
iter-i:迭代器往前移动i个元素位置
iter1-iter2:两个迭代器相减,返回的是int型变量,表示两个迭代器所指示的元素下标相减。
注意,不能对尾后迭代器进行解引用,因为这里的元素不存在。另外,也不支持两个迭代器类型相加。
⑤关键字iterator 与const_iterator,以及容器的cbegin(),cend()成员。
使用关键字const_iteraor定义的迭代器,表示该迭代器只能对所指示的元素进行读取,没有权限进行修改,即指示常量的迭代器。
cbegin()和cend()成员返回的是指示容器首元素和尾后元素的常量迭代器,只能读不能修改元素,否则语法错误。
⑥如果容器为空,则begin()成员和end()成员都返回尾后迭代器,可以通过比较 .begin()==.end()来判断容器是否为空。
⑦对应动态容器vector,因容器扩容时会自动重新申请一片新的内存空间,而容器的指针和迭代器都是老内存上的,所以原来的指针和迭代器都会失效需要重新定义。

浙公网安备 33010602011771号