迭代器-iterator

一、什么是迭代器?

  • 迭代器(iterator):用来指向、遍历、修改容器元素的变量,类似指针。
  • 可遍历STL容器内全部或部分元素的对象
  • 指出容器中一个特定的位置
操作   效果
*     返回当前位置上的元素值。如果该元素有成员,可以通过迭代器以operatro->取用
++     将迭代器前进至下一元素
==和!=   判断两个迭代器是否指向
= 为迭代器赋值(将所指元素的位置赋值过去)

 

  • 迭代器(iterator)函数
操作   效果
begin() 返回一个迭代器,指向第一个元素
end()   返回一个迭代器,指向最后一个元素之后

 

二、迭代器的分类

常用的迭代器按功能强弱分为:输入、输出、正向、双向、随机访问五种,这里只介绍常用的三种

不同容器的迭代器,其功能强弱有所不同。例如,排序算法需要通过随机访问迭代器访问容器中的元素,因此有的容器就不支持排序算法。

1、正向迭代器

  • 假设p是一个正向迭代器,则p支持以下操作:++p, p++, *p.
  • 此外,两个正向迭代器可以互相赋值,还可以用== 和 !=运算符进行比较。

2、双向迭代器

  • 双向迭代器具有正向迭代器的全部功能。
  • 双向迭代器p支持--p 和p--,使得p朝和++p相反的方向移动

3、随机访问迭代器

  • 随机访问迭代器具有双向迭代器的全部功能。
  • 随机访问迭代器p还支持以下操作:
  • p+=i: 使得p往后移动i个元素
  • p-=i: 使得p往前移动i个元素
  • p+i: 返回p后面第i个元素的迭代器
  • p-i:返回p前面第i个元素的迭代器
  • p[i]:返回p后面第i个元素的引用
  • 两个随机访问迭代器p1、p2还可以用<、>、<=、>=运算符进行比较。
  • 表达式p2-p1表示迭代器p2所指向元素和迭代器p1所指向元素的序号差
容器   迭代器类别
vector   随机
deque   随机
list   双向
set/multiset   双向
map/multimap   双向
stack   不支持迭代器
queue   不支持迭代器
priority_queue   不支持迭代器
#include <bits/stdc++.h>
using namespace std;

int main(){
    //复习:用指针来遍历数组元素。 
//    char s[] = "hello str";
//    char *p ; //&s &s[0]
//    //p是指向字符数组的指针,相当于一个迭代器 ,*p是元素 
//    for(p=s;*p !='\0';p++){
//        cout<<*p <<" ";
//    }
    int a[] = {10,20,30,40,50};
    vector<int> v(a,a+5);
    
    //定义迭代器,命名为it 
    vector<int>::iterator it;
    //迭代器指向vector<int>的首元素 
    //it = v.begin();
//    (*it)++;
//    cout<<*it<<" "<<v[0]<<endl; 
    //利用迭代器来遍历v中的元素
    for(it = v.begin();it != v.end();it++){
        cout<<*it<<" ";
    } 
    cout<<endl;
    //利用迭代器反向遍历vector
    vector<int>::reverse_iterator rit;
    for(rit = v.rbegin();rit!=v.rend();rit++){
        cout<<*rit<<" ";
    }
    return 0;
}

 

posted @ 2019-11-24 21:14  echo青少年编程  阅读(249)  评论(0)    收藏  举报