**在c++中,有的类型存在迭代器,利用迭代器可以对对象进行间接访问,像指针一样。
迭代器有有效和无效之分,有效的迭代器只想容器的元素或尾元素的下一位置。
有迭代器的类型同时拥有返回迭代器的成员,比如begin和end成员。begin成员返回的容器第一个位置的元素,end成员返回的是容器尾元素的下一个位置。尾后迭代器end是一个不存在的元素,本身无任何含义,但是仅仅是个标记而已。如果容器为空,则begin与end返回的是同一个迭代器,即尾后迭代器。**
- 迭代器的运算符
*iterator //解引用符
Iterator->mem //解引用符
Iterator1==iterator //二者指向相同位置
Iterator1!=iterator2 //二者指向不同位置
++Iterator //移动到下一个位置
--iterator //移动到之前的位置
需要注意的是,这些迭代器都必须是同一容器的迭代器且都必须是有效的迭代器。在表中,有两个特有的属于string和vector,其他的类型可能没有定义这两种运算。
- 迭代器的类型
拥有迭代器的标准类型使用iterator和const_iterator两种类型。前者指向普通元素,后者指向常量和普通元素都可以。一般在只是读取容器中的元素时,使用const_iterator,反之使用iterator。对于vector和string而言,使用时可以如此表示:
Vector<T>::iterator it //it可以读写
Vector<T>::const_iterator it //it只读
String::iterator it //it可读写
String::const_iterator it //it只读
可用cbegin和cend返回常迭代器,而begin和end只是返回普通迭代器。
在string和vector中,迭代器还可以使用如下的运算:
Iter+n //向后移动n个位置
Iter-n //向前移动n个位置
Iter+=n和iter-=n //移动后将位置给iter
Iter1 - iter2 //得到两个迭代器的距离
> 、>=、 <、 <= //判断位置前后
需要注意的是,迭代其之间的运算只能“-”,而没有“+”,如begin + end则不合法。