一、迭代器简介
二、 #const_iterator容器类型
三、迭代器的算术运算
一、迭代器简介
- 除了用下标来访问vector对象的元素外,还可以通过迭代器;
- 迭代器是一种检查容器内元素并遍历元素的数据类型,一般遍历元素都用迭代器,少数容器用下标操作;
- 标准库为每一种标准容器定义了一种迭代器类型。
- 迭代器iterator定义
vector<int>::iterator iter
- begin 和end操作
for(vector<int>::iterator iter=ivec.begin();iter!=ivec.end();iter++)
- end 操作返回的迭代器并不指向vector中任何实际元素,它只是起到一个哨兵的作用,表示我们已经处理完vector中所有元素。
- vector迭代器的解引用运算: *iter=0
二、const_iterator容器类型
- 每种容器类型定义了一种名为const_iterator的类型,该类型只能用于读取容器内的元素,不能改变值。
- 当我们对iterator类型解引用时,得到对某个元素的非const引用。如果我们对const_iterator类型解引用,则可以得到一个指向const对象的引用。
for(vector<string>::const_iterator iter=ivec.begin();iter!=ivec.end();)
{ cout<<*iter<<endl;
*iter=""
iter++;
}
- 使用 const_iterator类型时,我们可以得到一个迭代器,它自身值可以改变,但不能改变其所指向的元素的值。
- 不要把const_iterator和const的iterator对象混淆起来。声明一个const迭代器时,必须初始化迭代器,一旦初始化,不能改变(const迭代器没有什么用)
三、迭代器的算术运算
- 自增自减运算 iter++;
- iter + n
- 计算两个迭代器对象的距离:iter1 - iter2 ,该距离是名为difference_type的值,这里的difference_type是signed类型。
- 注意迭代器相减可以,但是不能相加,相加操作是未定义的,会出现编译错误
如下例 - 指向中间的元素:
vector<int>::iterator mid=vi.begin()+vi.size()/2;
vector<int>::iterator mid=(vi.begin()+vi.size())/2;