首页 > 编程语言 >C++迭代器iterator遍历

C++迭代器iterator遍历

时间:2023-10-23 16:55:26浏览次数:48  
标签:p2 容器 p1 迭代 iterator C++ 双向

iterator是通用的遍历容器的方式

通用模板

anySet <a...> as;
anySet <a...>::iterator it = as.begin();
for (; it != as.end(); it++)
{
    cout <<(*it);//即迭代器it指向的元素
}

四种迭代器

  1. 正向迭代器,定义方法如下:
    容器类名::iterator 迭代器名;

  2. 常量正向迭代器,定义方法如下:
    容器类名::const_iterator 迭代器名;

  3. 反向迭代器,定义方法如下:
    容器类名::reverse_iterator 迭代器名;

  4. 常量反向迭代器,定义方法如下:
    容器类名::const_reverse_iterator 迭代器名;

功能分类

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

  2. 双向迭代器。双向迭代器具有正向迭代器的全部功能。除此之外,若 p 是一个双向迭代器,则--p和p--都是有定义的。--p使得 p 朝和++p相反的方向移动。

  3. 随机访问迭代器。随机访问迭代器具有双向迭代器的全部功能。若 p 是一个随机访问迭代器,i 是一个整型变量或常量,则 p 还支持以下操作:
    p+=i:使得 p 往后移动 i 个元素。
    p-=i:使得 p 往前移动 i 个元素。
    p+i:返回 p 后面第 i 个元素的迭代器。
    p-i:返回 p 前面第 i 个元素的迭代器。
    p[i]:返回 p 后面第 i 个元素的引用。

    此外,两个随机访问迭代器 p1、p2 还可以用 <、>、<=、>= 运算符进行比较。p1<p2的含义是:p1 经过若干次(至少一次)++操作后,就会等于 p2。其他比较方式的含义与此类似。

    对于两个随机访问迭代器 p1、p2,表达式p2-p1也是有定义的,其返回值是 p2 所指向元素和 p1 所指向元素的序号之差(也可以说是 p2 和 p1 之间的元素个数减一)。

    不同容器的迭代器的功能

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

标签:p2,容器,p1,迭代,iterator,C++,双向
From: https://www.cnblogs.com/kdlyh/p/17782879.html

相关文章

  • C++U4-贪心算法1
    本节学习目标:贪心算法的概念以及对应练习题 贪心算法概念贪心算法的特点 利用贪心算法的两个性质 练习1:最优装载问题  【本题算法分析】优先把重量小的物品放进去,在容量固定的情况下,装的物品量最多。因此采用重量最轻者先装的贪心选择策略,可从局部最优达到......
  • C?C++?
    代码逆向在这里需要注意的几个点:c#语言赋值号(=)右边的值同样会跟着左边的值改变,如array6=array2,array6+=2;这个时候array2也会变如array7[num5] += text2[k] % '\u0005';,逆向则为array7【num5】-=ord(text【k】)%5,即chr-->ord空格的ASCII为32则逆向代码为v6=35j=0......
  • 如何从C++Pytho:变的思维方
    有人说用Python编程很简单,6岁小孩都能学会。计算机视觉专家和编程语言爱好者asyaf刚开始上手Python时也这么想。但门槛低就仅意味着使用简单吗?经常调用API的人是不是一定比可以从零写出源码的人菜?在本文中,asyaf告诉我们,从C++转向Python,是一次「从个人到社区」的思维......
  • 解决Clion中写多个C++文件中存在多个main函数报错的问题
    解决Clion中写多个C++文件中存在多个main函数报错的问题在刷题写C++的时候,常常因为要写多个文件,这时存在多个main就会报错,通常解决这个问题会有以下两种解决方法:把不需要的main给注释掉新建一个Project项目这边我介绍一种新的办法:(适用于IDEA)1.先下载这个插件,C/C++Single......
  • 让Devc++使用c11标准
    默认情况下,C语言编译器gcc4.7.2不符合任何ANSI/ISOC标准。当前默认值等效于-std=gnu90,这是1989/1990标准,扩展名为GNU-specific。  如果要实现标准一致性,比如c89,c90,c99或c11,可以使用以下任意一种:-std=c90-pedantic-std=c99-pedantic-std=c11-pedantic-std=c90也可以......
  • Modern C++ Overview综览
    ##PartI:Language(第一篇:语言)-大局观——简直像个新语言给出一个完整实例,展示(几乎)所有新特性的样貌,让学员从真实代码中一次性窥得(几乎)全豹,得知即将面对的新知和挑战。-auto,typededuction型别/型态推导是ModernC++至关重要的某种基础;这一节为后头诸多特性打好基础。-......
  • 挑战用很多种方法解决A+B(c++)
    写在前面的本文章主要是博主自己想写。水篇文章。正常作法#include<bits/stdc++.h>usingnamespacestd;intmain(){ inta,b; cin>>a>>b; cout<<a+b; return0;}数组#include<bits/stdc++.h>usingnamespacestd;intmain(){ inta[3]; cin>>a[1]>......
  • C++零基础教程(引用)
    (文章目录)前言本篇文章我们来讲解C++中非常重要的一个概念,这个概念就是引用,引用在C++中经常使用,下面就让我们来看看到底什么是引用吧。一、引用概念介绍及使用方法在C++中,引用是一种别名,它允许我们使用一个已经存在的对象来创建一个新的名称。引用提供了一种更直观、简洁和安......
  • C++中的RTTI机制、多继承中的虚函数
    C++中的RTTI机制基类有虚函数时才能实现RTTI机制:基类无虚函数时,typeid(*pA)返回的是pA声明时的类型。基类有虚函数时,typeid(*pA)返回的是pA指向对象的类型。比较两个带有虚函数的类的对象是否相等if(typeid(*a)==typeid(B))if(dynamic_cast<B*>(a)):如果能够成功向......
  • C++ 读写锁
    官网:https://zh.cppreference.com/w/cpp/thread/shared_mutex1.何为读写锁相比互斥锁,读写锁允许更高的并行性,互斥量要么锁住状态要么不加锁,而且一次只有一个线程可以加锁。读写锁可以有三种状态:读模式加锁状态;写模式加锁状态;不加锁状态;只有一个线程可以占有写模式的读写......