▲什么是迭代器?迭代器有什么作用?

2023-05-16

什么是迭代器?

先说说它是干嘛的吧!迭代器的作用是用来访问容器(用来保存元素的数据结构)中的元素,所以使用迭代器,我们就可以访问容器中里面的元素。没错!这和访问数组这个序列的指针一样,因为数组范围内的指针就是迭代器的一种。


指针和迭代器有什么区别呢?

1.指针针是C语言里面就有的东西,而迭代器是C++里面才有的

2.指针用起来灵活,效率高。迭代器功能更丰富一些

3.指针通常用来访问的是序列的元素,但不是所有的容器都会在连续的内存空间上保存数据。所以,对于这些容器我们不能单纯地使用指针作为迭代器,而是针对每一种容器,都会有专门配对的迭代器。

4.指针用起来灵活,效率高。迭代器功能更丰富一些,c++的stl里面很多算法都是基于迭代器的,一部分算法的参数可以传递指针作为迭代器使用。


迭代器怎么使用?

对于所有的迭代器,它们的使用方法和指针一样,比如自增(++),解引用(*)。除了数组以外,在大部分的容器中都会提供成员函数beget()(在类中创建,类是C++中对于C语言中的结构体的延伸),用来获取容器开始位置的迭代器,会提供成员函数end(),用来获取容器结束位置的迭代器。


如何理解begin()和end()这两个返回值为迭代器的函数?

begin()相当于数组中首元素地址,end()相当于末元素后一位置的地址(首元素地址+元素数量)


迭代器五大种类及功能解析

InputIterator(输入迭代器):只要求支持拷贝、自增和解引访问。
OutputIterator(输出迭代器):只要求支持拷贝、自增和解引赋值。
ForwardIterator(向前迭代器):同时满足 InputIterator 和 OutputIterator 的要求。
BidirectionalIterator(双向迭代器):在 ForwardIterator 的基础上支持自减(即反向访问)。
RandomAccessIterator(随机访问迭代器):在 BidirectionalIterator 的基础上支持加减运算和比较运算(即随机访问)

使用迭代器*样例展示

vect<int>是一种数据结构—我们熟悉的数组(亦称列表)

vect<int>::iterator定义迭代器iter

(迭代器的类型就为container::iterator)(container是某个STL容器

arr.begin()返回值指向首元素的为迭代器的函数

更多有关迭代器的函数请看下一栏



常用四大返回值为迭代器的函数


1.begin()/cbegin()
返回指向首元素的迭代器,其中 *begin = front。
2.end()/cend()
返回指向数组尾端占位符的迭代器,注意尾端占位符是没有元素的,不能进行解引用。
3.rbegin()/crbegin()
返回指向逆向数组的首元素的逆向迭代器,可以理解为正向容器的末元素。
4.rend()/crend()
返回指向逆向数组末元素后一位置的迭代器,对应容器首的前一个位置,没有元素。

使用返回值为迭代器的函数*样例展示

sort()和reverse()都是STL提供的算法函数

可以大大提高写代码的效率哦!


☆  刚刚学习的迭代器,怕忘记所以来做的笔记,欢迎大家一起交流~

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

▲什么是迭代器?迭代器有什么作用? 的相关文章

  • Leetcode 常用函数总结(C语言版本)

    include lt stdio h gt include lt stdbool h gt include lt math h gt include lt ctype h gt include lt string h gt include
  • C++ map表的应用

    map表可以存储数据对应关系 include lt map gt include lt string gt include lt iostream gt using namespace std int main map lt int str
  • C++判断是否是IP地址

    判断是否是IP地址 bool isIPAddress const char s const char pChar bool rv 61 true int tmp1 tmp2 tmp3 tmp4 i while 1 i 61 sscanf s
  • ARDUSUB 浏览

    ArduSub is an advanced open source ROV AUV control system Overview ArduSub水下机器人的控制器是一个完整的开源解决方案 提供远程操作控制 通过智能潜水模式 和全自动的执
  • C++判断是否是纯数字

    C 43 43 判断是否是纯数字 bool isDigitStr const char cstr if NULL 61 61 cstr cstr 0 61 61 0 return false int len 61 strlen cstr i
  • 命里有时终须有,命里无时莫强求

    命里有时终须有 xff0c 命里无时莫强求 今天是2012年2月24号 xff0c 和我谈了3个多月的女生突然之间说我们之间不合适 xff0c 让我以后不要再去骚扰她 真心第一次体会到失恋的感觉 xff0c 同时打电话给我姐姐诉说了下 xf
  • 共享内存--函数

    共享内存允许两个不相关的进程访问同一个逻辑内存 共享内存是在两个正在运行的进程之间传递数据的一种非常有效的方式 大多数的共享内存的具体实现 xff0c 都把由不同进程之间共享的内存安排为同一段物理内存 共享内存是由IPC为进程创建的一个特殊
  • assert用法

    判断是否为真 include 34 stdio h 34 include lt string h gt include lt stdlib h gt define NDEBUG include lt assert h gt void mai
  • strcpy原型

    已知strcpy 函数的原型是 char strcpy char strDest const char strSrc 其中strDest 是目的字符串 xff0c strSrc 是源字符串 xff08 1 xff09 不调用C 43 43
  • new与delete正确用法

    说明 xff1a 推荐使用如下宏 xff0c 可以在一定程度上避免使用空指针 xff0c 野指针的问题 define HW NEW var classname do try var 61 new classname catch var 61
  • Ubuntu分区和文件系统选择

    转载 xff0c 记录下 xff1a Ubuntu 分区和文件系统的选择 smwikipedia 博客园 对新手来说转移到 Ubuntu 第一件头痛的事情就是分区 xff0c 因为它和 Windows 上的分区方式有很大的不同 xff0c
  • [JavaScript]通过JS使用MD5加密

    JavaScript 通过JS使用MD5加密 目录 JavaScript 通过JS使用MD5加密项目信息如何使用额外信息 项目信息 github地址 https github com blueimp JavaScript MD5 作者dem
  • ThinkPad 插电时电源指示灯不亮

    今天来公司准备开电脑 xff08 ThinkPad T480 xff09 xff0c 开不开 电源键按了灯不亮 以为是插座没电 xff0c 但是发现手机充电器能给手机充上电 以为是电源适配器坏了 xff0c 因为是type c口的 xff0
  • [MongoDB] 启动报错ExecStart=/usr/bin/mongod --config /etc/mongod.conf (code=exited, status=14)

    原因是文件读取权限不足 xff0c 执行以下操作 span class token function sudo span span class token function chown span R mongod mongod var li
  • [Linux] Ubuntu如何查看磁盘剩余空间及内存

    如果有多台服务器 xff0c 这时需要安装一些新应用 xff0c 那么装在哪台设备上更合适呢 xff1f 这是我的第一个想法是看一看这些服务器的剩余空间和剩余内存 那么怎么才能看硬盘空间及内存呢 xff1f 查看剩余内存 span clas
  • [Linux] docker-compose环境下mongoDB4.4.2副本集搭建

    文章目录 实验目标实验环境目录结构操作步骤模拟宕机补充20201220补充2020122019参考 实验目标 两台服务器 主要使用服务器A进行读写 xff0c 每天需要定时重启 服务器B只进行备份操作 xff0c 不需要每天重启 当服务器A
  • [Alpine] 安装Alpine虚拟机,并安装docker,docker-compose

    下载alpine镜像 https www alpinelinux org downloads 开机后执行 setup alpine 一路回车直到需要输入root新密码 xff0c 可以先设置123456 以后再改 选择时区 xff0c 可以
  • 需求和预研

    需求 一定是有确定时间 xff0c 有衡量指标的任务 xff0c 这样才能可控 xff0c 才有意义 否则的话 xff0c 一个版本由若干个需求 xff0c 最后都没完成 xff0c 因为在做之前是未知数 xff0c 这个版本是一个有问题的

随机推荐

  • 设计/编码时,异常场景要处理到什么程度?容错到什么地步?

    设计时要清晰责任边界 xff0c 哪些异常需要吞掉自己处理 xff0c 哪些就暴露出去让其他服务 手段处理 这样目标清晰 xff0c 分工明确 xff0c 能够提高效率 xff0c 降低维护成本 xff0c 甩锅有理有据
  • 如何保质保量的完成需求

    如何保证数量 一个版本中 控制住每个需求的时间 即可保证数量 如何保证时间 避免返工 对齐 需求 设计方案 测试方案 代码质量 有问题一次解决 不修改引入新问题 设置路标 Roadmap 路标有时间节点 以及标明会完成哪些可度量的工作 每个
  • [Java] Request processing failed; nested exception is org.apache.ibatis.binding.Bin

    Request processing failed nested exception is org apache ibatis binding Bin springMVC xff0b mybatis 遇到的问题 xff0c 在XXXmapp
  • [Linux] CentOS7安装Chrome后yum不可以使用的解决方法

    症状 xff1a http dl google com linux chrome rpm stable x86 64 repodata repomd xml Errno 14 curl 52 Empty reply from server
  • [Java] 报错 java.lang.IllegalArgumentException: host parameter is null

    因为URL中存在中文字符 xff0c 需要编码 如 http baidu com 文件1 String encodeUrl 61 java span class hljs preprocessor net span span class h
  • Ubuntu 录屏

    GNOME录屏软件 Ubuntu 附带的屏幕录像机 xff0c 当您点击 Ctrl 43 Shift 43 Alt 43 R 时触发 它会自动开始录制整个屏幕 当您再次点击同一热键时 xff0c 截屏将结束并保存 点击录制热键时 xff0c
  • 【Odroid-XU4开发板】【安装Ubuntu18.04】【安装ROS】并读取串口数据的踩坑日记

    Odroid XU4开发板安装Ubuntu18 04安装ROS并读取串口数据的踩坑日记 文章目录 Odroid XU4开发板安装Ubuntu18 04安装ROS并读取串口数据的踩坑日记前言一 系统镜像准备二 烧录软件准备3 装机4 安装ro
  • 消除VS中C6054:可能没有为字符串"XXX"添加字符串零终止符的警告

    常见的是用 strlen 函数统计字符串的长度的时候 下面经常出现波浪线 xff08 即报警告C6054 xff09 xff0c 如下图所示 xff1a 怎么解决去掉这个警告呢 xff1f 64 wowpH 在这之前需要了解一下 strle
  • docker pull下载的image存在什么地方去了

    结论 xff1a 所有放入镜像文件都放在虚拟硬盘文件里面 windows上安装的docker其实本质上还是借助与windows平台的hyper v技术来创建一个linux虚拟机 xff0c 你执行的所有命令其实都是在这个虚拟机里执行的 xf
  • Eclipse CDT初步使用教程

    我用过Source insight和VS xff0c 感觉不顺手就没用了 xff0c 所以也没有深入研究过 xff0c 其他的如Code Blocks xff0c vim xff0c Clion Emacs我也没用过 xff0c 不好做评价
  • eclispe设置断点无效(No source file named)

    最近不知道做了什么操作导致eclipse的断点无效 xff0c 表现为gdb只认相对路径的断点 xff0c 不认绝对路径 xff0c 而eclipse打断点使用的是绝对路径 xff0c 导致无效 xff0c 输出信息是 xff1a No s
  • lemon源码基本概念整理

    1 数据结构 1 1 字符串存储 定义一个x1a的全局变量 xff0c 存放 y文件经过词法分析器分割出来的字符串 span class token keyword struct span s x1 span class token pun
  • lemon源码分析

    基本概念见上篇 lemon源码基本概念整理 1 follow集 对于如下4条产生式 program 61 expr TK SEM expr 61 expr TK IMPL expr expr 61 TK LPAREN expr TK RPA
  • Tcl脚本初步学习

    1 命令 Tcl 是一门基于命令的脚本语言 xff0c 每个命令通过换行符或分好隔开 每条命令都包含一个或多个单词 xff0c 第一个单词是命令名 xff0c 其他单词是命令的参数 xff0c 如 xff1a 命令 命令名 参数 set a
  • SQLite3源码学习(31) WAL日志的锁机制

    1 锁的原理 先来回顾一下回滚日志的文件锁 xff0c 之前的锁是针对数据库文件加锁的 xff0c 有4种类型 xff0c 分别是shared reserverd pending和exclusive 在WAL日志模式下不再使用原来的锁 xf
  • QGC调试px4固件飞控

    文章目录 前言一 开源软件地址二 硬件接线三 无人机调试1 刷固件2 选机架3 校准传感器4 校准遥控器5 飞行模式设置6 电源设置7 查看电机8 试飞 总结 前言 开源无人机调试 xff1a 硬件 xff1a pixhawk 2 4 8
  • CMake 基本使用方法

    1 学习背景 C语言工程使用make来构建工程 xff0c 但是对于大型工程来说文件的依赖关系很复杂 xff0c 手写makefile非常麻烦 xff0c 一般开源代码的构建方式都是使用autotool来配置编译环境和自动生成makefil
  • 嵌入式操作系统学习(3)FreeRTOS的任务调度机制

    1 任务状态 FreeRTOS可以创建多个任务 xff0c 但是对于单核cpu来说 xff0c 在任意给定时间 xff0c 实际上只有一个任务被执行 xff0c 这样就可以把任务分成2个状态 xff0c 即运行状态和非运行状态 当任务处于运
  • GTK+开发环境搭建

    一般讲到GUI程序开发 xff0c 大家都会想到C 43 43 等面向对象的高级语言 xff0c 而认为C语言不能做界面 C语言也可以用来写界面 xff0c GTK 43 就是一个用来写界面的库 xff0c 它本身就是用C语言写的 xff0
  • ▲什么是迭代器?迭代器有什么作用?

    什么是迭代器 xff1f 先说说它是干嘛的吧 xff01 迭代器的作用是用来访问容器 xff08 用来保存元素的数据结构 xff09 中的元素 xff0c 所以使用迭代器 xff0c 我们就可以访问容器中里面的元素 没错 xff01 这和访