C++ 迭代器简介

来源:互联网 发布:黎明杀机淘宝多少钱 编辑:程序博客网 时间:2024/04/30 14:59

迭代器是一种检查容器内元素并遍历元素的数据类型。

标准库为每一种标准容器定义了一种迭代器类型。迭代器类型提供了比下标操作更通用化的方法:所有的标准库容器都定义了相应的迭代器类型。因为迭代器对所有的容器都适用,现代C++程序更倾向于使用迭代器而不是下标操作访问容器元素。

 

1 容器的iterator类型

每种容器类型都定义了自己的迭代器类型;

vector<int>::iterator iter;

每个标准库容器类型都定义了一个名为iterator的成员,这里的iterator与迭代器实际类型的含义相同。

 

2 begin和end操作

每种容器都定义了一对命名为begin和end的函数,用于返回迭代器。如果容器中有元素的话,由begin返回的迭代器指向第一个元素。

vector<int> ivec;

vector<int>::iterator iter = ivec.begin(); 等价于 ivec[0];

由end操作返回的迭代器指向vector的“末端元素的下一个”。这是个不存在的元素,因为已经超出下标。如果vector为空,那么begin和end返回的迭代器相同。

 

由end操作返回的迭代器并不指向vector中任何实际的元素,相反,它只是起一个哨兵的作用,表明我们已经处理完vector的所有元素。

 

3 vector迭代器的自增和解引用运算

迭代器类型定义了一些操作来获取迭代器所指向的元素,并允许程序员将迭代器从一个元素移动到另一个元素。

 

迭代器类型可以使用解引用操作符*来访问迭代器所指向的元素。

vector<int>::iterator iter = ivec.begin();

int a = *iter; 等价于

int a = ivec[0];

 

迭代器使用自增操作符向前移动迭代器指向容器中下一个元素。由于end操作返回的迭代器不指向任何元素,因此不能对它进行解引用或自增操作。

 

4 const_iterator

每种容器类型还定义了一种名为const_iterator的类型,该类型只能用于读取容器内元素,但不能改变其值。

当我们对普通iterator类型解引用时,得到对某个元素的非const引用。而如果我们对const_iterator类型解引用时,则可以得到一个指向const对象的引用,如同任何常量一样,该对象不能进行重写。

 

5 迭代器的算术操作

vector迭代器也支持其他的算法操作。这些操作被称为迭代器算术操作。

① iter + n; iter – n; 可以对迭代器对象加上或减去一个整型值。这样做将产生一个新的迭代器,其位置在iter所指元素之前或之后的某个元素。加或减之后的结果必须指向iter所指vector中的某个元素,或是vector末端的后一个元素。加上火减去的值的类型应该是vector的size_type或difference_type类型。

② iter1 – iter2;该表达式用来计算两个迭代器对象的距离,该距离是名为difference_type的signed类型的值,这里的difference_type类型类似于size_type类型。

==========================================================================================================

小弟不才,自己创建的一个qq群!主要探讨linux C语言,shell脚本,驱动开发等等,欢迎大家加入,首先声明,本人水平很菜。。。。呵呵
QQ:213622826

==========================================================================================================