您的位置:首页 > 编程语言 > C语言/C++

C++ 迭代器iterator 小结

2020-07-12 17:05 190 查看

C++中的迭代器Iterator

  • 容器与其迭代器功能
  • 迭代器的辅助函数

  • 之前对C++中的iterator一直只有比较笼统的认识,由python中的迭代器知识所拟出来的浅薄印象,今天重新整理一遍,对研究有关vector等可迭代容器的题有所帮助。
    参考文章:C语言中文网
    Ceeji博客

    iterator概念和定义

    除了在其它语言中司空见惯的下标法访问容器元素之外,C++ 语言提供了一种全新的方法——迭代器(iterator)来访问容器的元素。迭代器其实类似于引用,指向容器中某一元素。迭代器助于统一各类容器的随机访问接口,因为很多容器无法用下标访问(vector[i])。
    要访问顺序容器和关联容器中的元素,需要通过“迭代器(iterator)”进行。迭代器是一个变量,相当于容器和操纵容器的算法之间的中介。迭代器可以指向容器中的某个元素,通过迭代器就可以读写它指向的元素。从这一点上看,迭代器和指针类似。

    按照功能的定义:

    正向迭代器:容器类名::iterator 迭代器名;
    常量正向迭代器:容器类名::const_iterator 迭代器名;(不能修改其指向的元素,可以改变指向
    反向迭代器:容器类名::reverse_iterator 迭代器名;(++操作向前读取)
    反向常量迭代器:容器类名::const_reverse_iterator 迭代器名;(顾名思义)
    双向迭代器:组合正向迭代器和逆向迭代器的功能,支持多遍算法
    随机访问迭代器:组合双向迭代器的功能与直接访问容器中任何元素的功能,即可向前向后跳过任意个元素。支持it1 < it2,即判断p1 在p2之前(同<=;>;>=)

    遍历vector代码示例
    vector<int> v; //已经初始化
    vector<int>::iterator i;  //定义正向迭代器
    i = v.begin();
    i += 5;
    cout << *i << endl; //输出第五个元素
    for (i = v.begin(); i != v.end(); ++i) {  //用迭代器遍历容器(注:++i比i++更快)
    cout << *i << " "; //输出元素
    *i *= 2;  //每个元素变为原来的2倍
    }

    容器与其迭代器功能

    vector: 随机访问
    deque: 随机访问
    list: 双向
    set/multiset: 双向
    map/multimap: 双向
    stack: 不支持迭代器
    queue: 不支持迭代器
    priority_queue: 不支持迭代器

    迭代器的辅助函数

    advance(p,n):使迭代器p向前或向后移动n个元素

    distance(p,q):计算两个迭代器之间的距离,即迭代器p经过多少次++操作后和迭代器q相等,如果调用时p已经指向q的后面,则该函数会陷入死循环

    iter_swap(p,q):用于交换两个迭代器p,q指向的值

    内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
    标签: