1.3 迭代器 - iterator

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=0;i<5;++i)
        v.push_back(i);
    vector<int>::iterator n;
    for(n=v.begin();n!=v.end();++n){
        cout<<*n<<" ";
        *n *=2;  //把每个元素都变为原来的两倍 
    }
    cout<<endl;
    //用反向迭代器遍历容器
    for(vector<int>::reverse_iterator j=v.rbegin();j!=v.rend();++j)  //注意反向 
        cout<<*j<<" "; 
    return 0;
} 

++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[5]={1,2,3,4,5};
    list<int>lst(a,a+5);   //数组名即指针,类似迭代器,故此处可用
    list<int>::iterator p = lst.begin();
    advance(p,2); 
    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 0;
}

 

posted @ 2016-05-05 15:25  党兴明  阅读(192)  评论(0编辑  收藏  举报