zoukankan      html  css  js  c++  java
  • 迭代器

    一、迭代器

    迭代器是一种类型替换,如typedef double* iterator;
    每个容器类都定义了迭代器,
    迭代器是一种广义指针,用来为不同的容器提供统一的接口。
    举个栗子:
    vector::iterator pr;
    此时代表的是:
    double* pr;
    vector::iterator pr;
    此时代表的是:
    int* pr;
    而迭代器iterator用于泛指所有类型指针。

    //声明一个迭代器
    vector<double>::iterator pd;
    //或者 auto pd=abc.begain();
    
    //使用迭代器
    *pd=22.3;
    pd=abc.begain();
    ++pd;
    

    遍历

    vector<double>::iterator pd;
    
    for(pd=abc.begain();pd !=abc.end();pd++)
        cout<<*pd<<endl;
    

    使用auto可进一步简化代码:

    for(auto pd=abc.begain();pd !=abc.end();pd++)
        cout<<*pd<<endl;
    

    二、迭代器类型

    输入和输出是相对于程序说的,输入代表读容器,输出代表写容器。

    1. 输入迭代器:单通行,只读;
    2. 输出迭代器:单通行,只写;
    3. 正向迭代器:多通行,可读写,也可只读
    //可读写
    int* rw;
    //只读
    const int* onlyr;
    
    1. 双向迭代器:包含正向迭代器特性,双向访问;
    2. 随机访问迭代器:包含双向迭代器所有特性,随机访问。

    作为一种编程风格,最好直接避免使用迭代器,而是尽可能使用STL函数,如for_each.

    三、一些函数和迭代器

    可以将指针容器作为迭代器使用在函数中。

    函数 作用
    sort(a,a+10); 指定范围内排序
    copy(a,a+10,c.begain()); 将指定内容a复制到矢量c中

    将内容输出到屏幕上(cout接口):

    #include<iterator>
    ...
    ostream_iterator<int,char> out_iter(cout," ");
    
    copy(a.begain(),a.end(),out_iter());
    

    or

    #include<iterator>
    ...
    copy(a.begain(),a.end(),ostream_iterator<int,char>(cout," "));
    

    cin接口

    copy(istream_iterator<int,char>(cin),istream_iterator<int,char>,dice.begain);
    

    这样就可以使用键盘输入到dice容器内了。

    返回迭代器下标方法

    第一种方法

    首先介绍一个函数:distance,它返回的是两个迭代器之间的距离。

    使用这个函数,就能完成迭代器与下标之间的转换:下标 = 当前迭代器位置-容器头部

    注:在使用过程中,可以结合begin()和返回的迭代值进行求下标的计算。

    #include <iostream>
    #include <list>
    using namespace std;
     
    int main () {
      list<int> mylist;
      for (int i=0; i<10; i++) mylist.push_back (i*10);
     
      list<int>::iterator first = mylist.begin();
      list<int>::iterator last = mylist.end();
      list<int>::iterator it = first;
      for(;it != last;++it)
          cout<<"第"<<distance(first,it)<<"个元素的值为:"<<*it<<endl;
      system("pause");
      return 0;
    
    第0个元素的值为:0
    第1个元素的值为:10
    第2个元素的值为:20
    第3个元素的值为:30
    第4个元素的值为:40
    第5个元素的值为:50
    第6个元素的值为:60
    第7个元素的值为:70
    第8个元素的值为:80
    第9个元素的值为:90
    Press any key to continue . . .
    

    第二种方法

    由迭代器得到元素下标

    vector<int> temp = { 1,3,2,4,5,0 };
    vector<int>::iterator it=temp.begin();
    it+=2;
    //此时it对应的元素下标为
    
    int index=&*it-&temp[0];
    
  • 相关阅读:
    Spring Boot|Async
    SonarQube使用
    大数据|linux权限chmod和chown
    Spring Boot|监控-Actuator
    Docker|部署及简单使用
    Spring|IOC启动流程
    Spring|注解
    Spring|@Autowired与new的区别
    Spring|Spring MVC
    个人站点
  • 原文地址:https://www.cnblogs.com/chendeqiang/p/12861549.html
Copyright © 2011-2022 走看看