迭代器提供了对容器中的对象的访问方法,并且定义了了容器中对象的范围。
迭代器就如同一个指针。事实上,c++的指针也是一种迭代器。但是,迭代器不仅
仅是指针,因此,不能认为他们一定有地址。例如,一个数组的下标(索引),也
可以认为是一种迭代器。
除了使用下标来访问vector对象的元素外,标准库还提供了另一种访问元素的方
法:使用迭代器(iterator)。迭代器是一种检查容器内元素并遍历元素的数据类型。
标准库为每一种标准容器定义了一种迭代类型。迭代器类型提供了比下表操作更
通用化的方法(不是每种容器都支持下标操作)。
如下是vector迭代器的示例:
#include<stdio.h>
#include<algorithm>
#include<vector>
#include<iostream>
using namespace std;
int main()
{
vector<int> vec;
vec.push_back(4);
vec.push_back(1);
vec.push_back(8);//vec:{4,1,8}
vector<int>::iterator itr1=vec.begin();//vector的迭代器类型
vector<int>::iterator itr2=vec.end();//[begin,end)
for(vector<int>::iterator itr=itr1;itr!=itr2;++itr)//迭代器可直接比较(==或!=),++itr表示指向下一个元素
cout<<*itr<<" ";//print out:4 1 8
cout<<endl;
sort(itr1,itr2);
for (vector<int>::const_iterator iter=vec.begin();iter!=vec.end();++iter)
cout<<*iter<<" ";//const_iterator返回的是一个const值,不允许用const_iterator进行赋值
cout<<endl;
}
begin和end操作:
每种容器都定义了一对命名为begin和end的函数,用于返回迭代器。如果容器中
有元素的话,由begin返回的迭代器指向第一个元素,由end返回的迭代器指向末端元
素的下一个(end返回的迭代器不指向容器中任何实际元素)。如果容器为空,则begin
和end返回的迭代器相同。
const_iterator:
const_iterator返回的是一个const值,不允许用const_iterator进行赋值。
使用const_iterator类型时,我们可以得到一个迭代器,他自身的值可以改变,但不能
用来改变其所指向的元素的值。
(不要混淆const_iterator和const iterator,后者应用很少)
迭代器的算术操作:
(iter+n iter-n),其位置在iter所指元素之前(加)或在之后(减)n个元素的位置。
加减结果要在[begin,end]之间。
(iter1-iter2)计算两个迭代器对象的距离,要保证iter1和iter2两者都必须指向同一个
容器。
(任何改变容器容量的操作都会使已存在的迭代器失效)