A
1)概述
要访问顺序容器,关联容器中的元素就要通过迭代器进行。迭代器是个变量,类似于指针
2)分类
按照定义方式不同可分为四种(iterator, const_iterator, reverse_iterator, const_reverator_iterator)
3)定义
4)例子
#include<iostream>
#include<vector>
using namespace std;
int main(){
vector<int>v;
for(int i=;i<;++i)
v.push_back(i);
vector<int>::iterator n;
for(n=v.begin();n!=v.end();++n){
cout<<*n<<" ";
*n *=; //把每个元素都变为原来的两倍
}
cout<<endl;
//用反向迭代器遍历容器
for(vector<int>::reverse_iterator j=v.rbegin();j!=v.rend();++j) //注意反向
cout<<*j<<" ";
return ;
}
++i比i++要更有效率,因为重载的问题,后置++多生成一个临时对象
B 迭代器的功能分类
1)迭代器的功能分类(p是迭代器,i是整型)
* :正向迭代器。 ++P, P++, *p
** :双向迭代器。正向迭代器的全部功能以及 p--, --p
***:随机访问迭代器。
p+=i;
p-=i;
p[i];
< , > , <= , >= 比较
2)不同容器上的迭代器得分功能
C 迭代器的辅助函数
1)
* :advance(p,n); 使迭代器p向前或向后移动n个元素
** :distance(p,q);计算两个迭代器之间的距离
***:iter_swap(p,q);交换两个迭代器指向的值
使用上述函数需要包含头文件algorithm
2)示例
//迭代器的辅助函数
#include<iostream>
#include<algorithm>
#include<list>
using namespace std;
int main(){
int a[]={,,,,};
list<int>lst(a,a+); //数组名即指针,类似迭代器,故此处可用
list<int>::iterator p = lst.begin();
advance(p,);
cout<<"1:"<<*p;
list<int>::iterator q = lst.end();
q--;
swap(p,q);
cout<<endl<<"2:";
for(p=lst.begin();p!=lst.end();++p)
cout<<*p<<" ";
return ;
}