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

  • 相关阅读:
    敌兵布阵(线段树单点更新+区间查询)
    小明上学(CCF认证2018-12-1 )
    There Are Two Types Of Burgers (Educational Codeforces Round 71)
    Bad Prices ( Codeforces Round #582 )
    Redis热点key优化
    Redis big key处理
    Redis的安全问题
    Redis的flushall/flushdb误操作
    Redis在linux系统中的优化
    Redis之缓存设计
  • 原文地址:https://www.cnblogs.com/chen-cai/p/10321559.html
Copyright © 2011-2022 走看看