C++ 迭代器简介

来源:互联网 发布:python画图pylab 编辑:程序博客网 时间:2024/05/02 04:59
标准库为每一种标准容器定义了一种迭代器类型,用于访问或修改元素的值。在C++中,使用迭代器比使用下标操作更普遍。

1、容器的iterator类型
vector::iterator iter;

2、begin和end
每种容器都定义了begin和end函数,begin函数指向容器里的第一个元素,end指向容器末端元素的下一个,即超出末端迭代器的下一个。通过begin和end可以对迭代器进行初始化。
vector::iterator iter=ivec.begin()

3、运算和解引用运算符
迭代器定义了一些操作来获取迭代器所指向的元素,可以使用解引用运算符获取迭代器指向的元素:
*iter=0; //既可以赋值也可以读取
其他运算:++ == !=

4、程序示例
用迭代器编写循环是非常典型的做法:

#include <vector>using namespace std;int main(){    vector<int> ivec(10);    for(vector<int>::iterator iter=ivec.begin();        iter!=ivec.end();++iter)        *iter = 0;    return 0;}

5、const_iterator
除iterator之外,每种容器类型还定义了const_iterator类型,const_iterator智能用于读取元素值,不能为元素赋值
注意区分const_iterator和const的iterator类型:
const_iterator: 不能改变元素值,用来读取容器的元素,可以指向不同的元素
const的iterator:可以改变元素的值,相当于改变iterator指向的值,但是只能指向一个元素。

6、迭代器的算数操作
iter+/-n:
产生一个新的迭代器指向容器的元素
iter1+/-iter2:
计算两个迭代器对象的距离,结果为difference_type的signed类型

可以用迭代器算术操作来移动迭代器直接指向某个元素:
vector<int>::iterator mid=ivec.begin()+ivec.size()/2;

注意:任何改变vector长度的操作都会使已存在的迭代器失效,如push_back()

0 0