迭代器提供了比下标操作更通用的遍历容器雷元素的方法。其对所有的容器都适用,现代C++程序更加倾向于适用迭代器而不是下标操作。
//迭代器测试
vector<int>::iterator begin = v3.begin(); //指向容器的第一个元素
vector<int>::iterator end = v3.end(); //z指向容器末端元素的下一个————超出末端迭代器,起哨兵作用
for(vector<int>::iterator iter = begin; iter != end; iter++)
{
*iter = 0;
cout<<*iter<<endl;
}
1. const_iterator, 只能读取容器内的元素,不能改变其值
当对const_iterator 类型解引用时,得到的是指向const对象的引用。
for(vector<int>::const_iterator citer = v3.begin();citer!=v3.end();citer++)
{
cout<<"——"<<*citer;
}
适用const_iterator 类型时, 他自身的值可以改变,但不能用来改变它所指向的元素的值。
const_iterator 对象与const 的iterator对象:
声明const 迭代器时,如同其他类型的const对象,必须初始化,一旦初始化后,其值就不能改变了。
const vector<int>::iterator ci = v3.begin();
ci++; //错误,不可改变const 对象
const_iteraor可用于 const vector 和 非const vector ,const 迭代器几乎没什么用。
2. 迭代器的算数操作
(1). iter+/-n加上或减去的值的类型应该是:vector的size_type或difference_type类型。
vector<int>::difference_type d3 = 3;
vector<int>::iterator it = v3.begin();
vector<int>::iterator it_3 = it+d3;
cout<<endl<<"it_3 = "<<*it_3<<endl;
(2). iter1-iter2
结果为类型是difference_type的signed类型的值。表示两个迭代器对象之间的距离,iter1和iter2 必须是指向同一个容器。
定义容器的中间元素:
vector<int>::iterator mid = vi.begin()+vi.size()/2;
注:改变容器的长度的操作都会使已存在的迭代器实效。