迭代器(iterator):一种访问string对象以及容器中的元素的类型,不必拘泥于迭代器概念本身,或它到底是容器定义的迭代器类型还是一种对象,只需要理解它的操作是用来访问string对象以及容器里的元素的。其类似于指针。
2. 类型vectorvint; vector ::iterator iit; //读写类型 vector ::const_iterator icit; //只读类型
迭代器的类型是:
- 容器<类型>::iterator 迭代器名; ——读写类型
- 容器<类型>::const_iterator 迭代器名; ——只读类型
有迭代器的类型同时拥有返回迭代器的成员函数:begin()和end()函数,它们的返回值就是迭代器类型iterator,所以我们可以使用begin()和end()函数来对容器和string对象的元素进行遍历。begin()指向的是容器的第一个元素,比如:vector就是下标为0的元素,end()指向的是最后一个元素的下一个元素,比如:vector里有10个元素,end()就是指向下标为10的元素,注意:这个元素的值是未知的,未定义的,只是用来表示遍历到了头而已。
vectorvint; for(auto it=vint.begin();it!=ving.end();it++) { cout<<*it< 3.1 cbegin()和cend()函数 cbegin()函数和cend()函数是C++11的新标准,与begin()和end()的区别是,cbegin()和cend()返回的是const_iterator类型。就是用来,1.避免在循环体中做出了对元素修改的操作,2.当容器中所储对象是常量,则也只能使用这种类型。
4. 迭代器的运算符5. 迭代器的运算
*iterator 获取迭代器所指容器的元素 iterator->item 解引用,获取该元素名为item的成员,等价于(*iterator).item ++iterator 下一个元素 --iterator 上一个元素 iterator1==iterator2 判断两个迭代器是否在同一位置 iterator1!=iterator2 判断两个迭代器是否在同一位置
iterator+n 迭代器向后移n个位置,n必须是整数 iterator-n 迭代器向前移n个位置,n必须是整数 iterator+=n 迭代器向后移n个位置,iterator=iterator+n,n必须是整数 iterator-=n 迭代器向前移n个位置,n必须是整数 iterator1-iterator2 看iterator1比iterator2领先几个位置,注意,iterator1必须大于iterator2,且返回类型是difference_type >、>=、<、<= 关系运算,比较两个迭代器的前后位置大小 注意:迭代器的运算里,没有iterator1+iterator2!!!,没有两个迭代器相加的运算。


![[C++] 迭代器 [C++] 迭代器](http://www.mshxw.com/aiimages/31/1036809.png)
