zoukankan      html  css  js  c++  java
  • C++迭代器(STL迭代器)

    迭代器按照定义方式可以分为以下四种:

    (1)正向迭代器,定义方法如下:

    容器类名::iterator 迭代器名;

    (2)常量正向迭代器,定义方法如下:

    容器类名::const_iterator 迭代器名;

    (3)反向迭代器,定义方法如下:

    容器类名::reverse_iterator 迭代器名;

    (4)常量反向迭代器,定义方法如下:

    容器类名::const_reverse_iterator 迭代器名;

    通过迭代器,我们可以读取它指向的元素,*迭代器名 就表示迭代器所指向的元素,通过非常量迭代器还能修改其指向的元素

    迭代器都可以进行++操作,反向迭代器和正向迭代器的区别在于:

    对正向迭代器进行++操作时,迭代器会指向容器中的后一个元素;

    对反向迭代器进行++操作时,迭代器会指向容器中的前一个元素;

    注意:容器适配器stack,queue,priority_queue 没有迭代器。

    常用的迭代器按功能强弱分为:输入,输出,正向,双向,随机访问 五种。

    (1)正向迭代器

    假设p是一个正向迭代器,则p支持以下操作:

    ++p,p++,*p,两个迭代器可以进行相互赋值,以及==,!=比较

    (2)双向迭代器

    双向迭代器具有正向迭代器的所有功能,并且可以进行 --p 和 p-- 的操作

    (3)随机访问迭代器

    随机访问迭代器具有双向迭代器的所有功能,并且还可以进行以下操作,假设i是一个整型变量或常量:

    p+=i:p往后移动i个元素

    p-=i:p往前移动i个元素

    p+i:返回p后面第i个元素的迭代器

    p-i:返回p前面的第i个元素的迭代器

    p[i]:返回p后面第i个元素的引用

    两个随机访问迭代器还可以进行<,>,<=,>=,- 的操作

    容器                迭代器功能

    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指向的值

  • 相关阅读:
    技术选型总结
    这些年来收集的好用的好玩的软件,强烈推荐给大家
    如何解决markdown中图片上传的问题
    01.如何把.py文件打包成为exe,重点讲解pyinstaller的用法
    Asp.net中汉字转换成为拼音
    程序员常用网址收集
    通过IP来判断所在城市
    以太坊
    分布式系统领域经典论文翻译集
    T50
  • 原文地址:https://www.cnblogs.com/chen-cai/p/10321559.html
Copyright © 2011-2022 走看看