C++标准库迭代器Iterator类型学习笔记
时间:2011-04-25 来源:Crazyant_
标准库为每一种标准容器(包括vector)定义了一种迭代器类型,迭代器类型提供了比下标操作用来遍历容器更通用的方法,所有的标准库容器都定义了相应的迭代器类型,但只有少数的容器(vector)定义了下标操作。
迭代器类型属于相应的标准库容器类型,例如定义了vector,就可以直接获取它的迭代器:
vector<int>::iterator iter;//定义了一个vector<int>类型的iterator
1、迭代器相关的一些操作
假设定义了vector<int> v和vector<int>::iterator iter
操作调用方式 |
操作说明 |
v.begin() |
返回容器v的第一个元素对应的iterator |
v.end() |
返回容器v的最后一个元素后面位置的iterator |
*iter |
返回iter位置上的元素值 |
Iter++,iter--,iter+n,iter-n |
迭代器可以进行数字运算,结果值要确定在范围内 |
==,!= |
迭代器的相互比较 |
2、const_iterator和iterator
每种容器类型都定义了一个const_iterator类型,该类型只能读取容器的元素,不能改变其值。
const_iterato类型的对象citer,其自身值可变,比如citer++等,但是它指向的元素值无法改变,如*citer++,这是不允许的。
const_iter和const iter不同,前者自身可变,指向的元素不可变;后者指向固定的位置,位置上的信息可取可存。
3、迭代器的算术运算
迭代器的算术操作只适合一些少数的容器,例如vector,因为这些容器类似数组,能够快速定位。
迭代器的算术操作:
Ø Iter+n和iter-n//迭代器计算
Ø Iter1 – iter2//迭代器想减
Ø Mid = v.begin() + v.size()/2;//直接计算
注:任何改变vector长度的操作,都会是已经存在的迭代器失效,例如vector进行了push_back,那么已存在的迭代器失效。