C++标准库之迭代器

2023-05-16

迭代器是对指针进行进一步抽象的产物。

迭代器是遍历所有容器(序列)/流的统一界面,是标准库泛形算法的基础。

迭代器根据其能力分为五种:

 

categorypropertiesvalid expressions
all categoriescopy-constructiblecopy-assignable and destructibleX b(a);
b = a;
Can be incremented++a
a++
Random AccessBidirectionalForwardInputSupports equality/inequality comparisonsa == b
a != b
Can be dereferenced as an rvalue*a
a->m
OutputCan be dereferenced as an lvalue 
(only for mutable iterator types)
*a = t
*a++ = t
 default-constructibleX a;
X()

Multi-pass: neither dereferencing nor incrementing affects dereferenceability

Multi-pass是指,迭代器不管进行多少次自增及解引用,都不会使得其指过的对象无法访问。

{ b=a; *a++; *b; }
 Can be decremented--a
a--
*a--
 Supports arithmetic operators + and -a + n
n + a
a - n
a - b
Supports inequality comparisons (<><= and >=) between iteratorsa < b
a > b
a <= b
a >= b
Supports compound assignment operations += and -=a += n
a -= n
Supports offset dereference operator ([])a[n]

辅助函数

template <class InputIterator, class Distance>
void advance (InputIterator& it, Distance n);

   it跳转到与原始指向相隔n的另一个元素。it为双向迭代器、随机访问的情况下n可以为负数,否则n只能为正数。表示的概念为it+=n

template<class InputIterator>
typename iterator_traits<InputIterator>::difference_type
distance (InputIterator first, InputIterator last);

  计算 first 与 last 之间的迭代器个数

template <class BidirectionalIterator>
BidirectionalIterator prev (BidirectionalIterator it,
typename iterator_traits<BidirectionalIterator>::difference_type n = 1);

  表示的概念为 it - n

template <class ForwardIterator>
ForwardIterator next (ForwardIterator it,
typename iterator_traits<ForwardIterator>::difference_type n = 1);

  表示的概念为 it + n

迭代器产生器

template <class Container>
back_insert_iterator<Container> back_inserter (Container& x);

  生成输出迭代器,*it = x 调用Container.push_back(x)实现

template <class Container>
front_insert_iterator<Container> front_inserter (Container& x);

  生成输出迭代器,*it = x 调用Container.push_front(x) 实现

template <class Container>
insert_iterator<Container> inserter (Container& x, typename Container::iterator it);

  生成输出迭代器,*it = x 调用Container.insert(it,x)实现

迭代器适配器,将迭代器包装成move_iterator

template <class Iterator>
move_iterator<Iterator> make_move_iterator (Iterator it);

  生成输入迭代器,将迭代器包装成move_iterator。*it = std::move(*it)

template <class OutputIterator, class T>
class raw_storage_iterator;

  将未初始化的内存包装成输出迭代器,使其可以像已经初始化的内存一样调用 *it=x

获取迭代器属性

  iterator_traits<iter>::value_type

  iterator_traits<iter>::reference

  iterator_traits<iter>::pointer

  iterator_traits<iter>::difference_type

  iterator_traits<iter>::iterator_category

 

转载于:https://www.cnblogs.com/vsuu/p/4314427.html

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

C++标准库之迭代器 的相关文章

  • C语言中交换两个数的方法

    问题描述 xff1a 程序中有两个数a b 其中a 61 4 b 61 5 xff0c 现在希望交换两个数的值 xff0c 使得a 61 5 b 61 4 在这里我总结了一下目前我已经掌握的C语言中交换两个数的方法 xff0c 主要如下几种
  • 输出平行四边形图案(多种方案)

    问题描述 xff1a 使用 在控制台打印平行四边形 例如 xff1a 平行四边形中最长的一行输出的 是5个 xff0c 则平行四边为 xff1a span class hljs bullet span span class hljs emp
  • 自己实现strcat函数

    问题描述 xff1a 自己实现一个MyStrcat函数 xff0c 要和C语言库函数的strcat函数完成同样的功能 问题分析 xff1a 首先我们要了解一下strcat函数它到底做了什么事情 1 函数原型 char strcat char
  • 简易文件打包程序

    对指定目录下面的文件进行打包 简易解包程序参考博客另外一篇文章 xff1a http blog csdn net yi ming he article details 77689453 打包方式 xff1a 把目录下面的文件名 xff0c
  • 简易解包程序

    对压缩包进行解压 简易压缩程序请参考博客的另外一篇文章 xff1a http blog csdn net yi ming he article details 77689405 解包方式 xff1a 根据打包建立的索引表 xff0c 找到对
  • linux 挂载错误Transport endpoint is not connected

    mount了mfs后 xff0c 重新挂载之后 xff0c 出现如下错误 xff1a usr local mfs bin mfsmount H 192 168 103 101 mnt fuse bad mount point 96 mnt
  • 新字体的永久注册

    CString GetCurrentModuleDir TCHAR szPath MAX PATH 43 1 61 0 if 0 61 61 GetModuleFileName HMODULE amp ImageBase szPath MA
  • yolov5/v7/v8自动检测多个文件夹及截取锚框

    目前yolo仅支持检测图片或单个文件夹 xff0c 但在很多时候需要对成百上千个文件夹中图片进行检测 xff0c 再根据得到的位置信息txt文件来截取图片 xff0c 如何一步完成呢 xff0c 详情见下文 在detect py中将save
  • 带参数的宏定义、函数与内联函数

    文章目录 前言一 宏定义1 基本用法2 带参数的宏定义 二 函数1 定义与声明2 调用 三 内联函数 inline总结 前言 在实际项目开发 xff0c 尤其是嵌入式软件项目中 xff0c 经常可以看到大量宏定义的分布 xff0c 其中又多
  • C++语言为什么跨平台?

    xfeff xfeff 现在主流的手机平台很多 xff0c 比如 xff1a Windows开发的Windows Phone xff08 WP 34 X 34 xff09 Apple 苹果公司 开发的ios xff0c Google 谷歌
  • CMake 中的list操作

    Cmake 中定义了一系列的数组操作 xff0c 使用方法如下 list INSERT lt list gt lt element index gt lt element gt lt element gt list REMOVE ITEM
  • 解决error while loading shared libraries: libXXX.so.X: cannot open shared object file: No such file

    原文转自CSDN xff0c 本文有删减 一 问题 运行hydra时 xff0c 提示错误 xff1a hydra error span class hljs keyword while span loading span class hl
  • 栈(超简单讲解版

    没错又是我来了 xff08 上一篇DFS还没写好就先来写队列与栈了哈哈哈哈 是很简单的内容呢 xff08 比DFS简单到哪里去了 先来认识一下栈 什么是栈 xff1f 度娘是这样说的 xff1a 栈 xff08 stack xff09 又名
  • ROS下使用stm32 与rosserial进行通信的开发说明及源代码示例

    关于stm32下的ROS开发环境介绍说明 xff0c 此开发环境是在Linux下使用stm32的标准库 STM32F10x StdPeriph Driver3 5 xff0c 进行stm32开发 xff0c 整体开发框架已搭建完成 xff0
  • 【ROS Rikirobot基础-使用系列 第四章节】Rikirobot小车使用激光雷达进行自动导航

    利用激光雷达进行自动导航 这里我们教大家使用的是利用激光雷达导航 xff0c 关于深度摄像头的导航我们后面会教大家使用 1 上电启动小车 xff0c 主控端执行启动小车的命令 xff1a roslaunch rikirobot bringu
  • js函数的四种调用形式以及this的指向

    以函数的 形式调用 xff1a function fun alert this 61 61 window fun 调用成功 xff0c this代表window 以方法的形式调用 var obj 61 name 61 34 hello 34
  • warning: control reaches end of non-void function

    用gcc编译一个程序的时候出现这样的警告 xff1a warning control reaches end of non void function 它的意思是 xff1a 控制到达非void函数的结尾 就是说你的一些本应带有返回值的函数
  • 项目中遇到的问题及解决方案

    1 用到的视频播放插件只支持加载相对路径 xff0c 不能加载绝对路径上的资源 解决方案 xff1a 为tomca t配置 文件 创建索引 xff0c 在 server xml文件中增加配置 lt Context path 61 34 IM
  • Oracle批量更新sql写法

    select from test table for update begin for cur in select id from test table loop update test table set name 61 39 苏晓伟 3

随机推荐

  • JVM 垃圾回收机制

    JVM体系结构概览 xff1a 垃圾回收 xff08 GC xff09 发生在哪个区 xff1a heap xff08 堆 xff09 区 GC是什么 xff1f 分几种 xff1a GC 分代收集算法 次数上频繁收集young区 xff0
  • JAVA 自定义注解

    多说无益 xff0c 直接上代码 import java lang annotation Documented import java lang annotation ElementType import java lang annotat
  • Vuex 学习

    什么是vuex xff1a 专门在Vue中实现集中式状态 xff08 数据 xff09 管理的一个Vue插件 xff0c 对vue应用中多个组件的共享状态进行集中式的管理 xff08 读 写 xff09 xff0c 也是一种组件间通信的方式
  • zookeeper本地安装启动

    下载zookeeper xff1a 链接 xff1a https pan baidu com s 151ZdXYg6QDB A8TRK0wrpw 提取码 xff1a yyds 复制到linux上并解压修改配置文件的名字 xff0c 将 zo
  • zookeeper集群安装

    准备3台服务器 xff0c 安装三个zookeeper xff0c 修改zoo cfg配置 xff0c dataDir 61 opt module zookeeper 3 5 7 zkData 分别在zkData目录下创建一个文件myid
  • zookeeper 启动停止脚本

    bin bash case 1 in 34 start 34 for i in 192 168 66 133 192 168 66 134 192 168 66 129 do echo zookeeper i 启动 ssh i 34 opt
  • ElasticSearch-全文检索

    docker 下载安装 es镜像 docker pull elasticsearch 7 4 2 es的可视化工具 docker pull kibana 7 4 2 mkdir p mydata elasticsearch config m
  • atoi()和stoi()的区别----数字字符串的处理

    相同点 xff1a 都是C 43 43 的字符处理函数 xff0c 把数字字符串转换成int输出 头文件都是 include lt cstring gt 不同点 xff1a atoi 的参数是 const char 因此对于一个字符串str
  • ROS基础教程--CostMap_2D包的一些理解

    本文是在综合了多篇文章的基础之上进行的综合 1 基本概念 Voxel xff1a 体素 xff0c 即顾名思义是体积的像素 用来在三维空间中表示一个显示基本点的单位 类似于二维平面下的pixel xff08 像素 xff09 voxel是三
  • [move_base-24] process has died [exit code -6, cmd lib/move_base/move_base odom:=mobile_base_control

    尝试使用TIAGo机器人进行SLAM时 xff0c 运行 roslaunch tiago 2dnav gazebo tiago mapping launch public sim 61 true 指令时加载TIAGo机器人失败 xff0c
  • geoserver集群搭建及数据共享设置

    Geoserver版本及所需依赖 geoserver 2 16 0geoserver 2 16 SNAPSHOT jms cluster plugingeoserver 2 16 SNAPSHOT activeMQ broker plugi
  • postgresql 9.5 now()函数少8小时

    select now 时获取的时间比系统时间少8小时 xff0c 时区问题 xff0c 可能是postgresql conf中的log timezone timezone没有配置成 PRC SELECT now AT TIME ZONE 3
  • sld样式文件demo

    标注样式为 xff1a 代码为 xff1a lt xml version 61 34 1 0 34 encoding 61 34 UTF 8 34 gt lt StyledLayerDescriptor xmlns 61 34 http w
  • 清理Linux buffer/cache内存的方法

    解决Linux buffer cache内存占用过高的办法 xff08 转载 xff09 Linux中Cache内存占用过高解决办法 xff08 转载 xff09
  • windows10下修改Docker镜像目录

    1 背景需求 Windows 版本 xff08 Windows 10 wsl 2 xff09 docker 默认程序安装到c盘 xff0c 数据存储于C Users 当前用户名 AppData Local Docker wsl data e
  • conda 创建的 python 虚拟环境中安装 gdal

    在 conda 创建的Python虚拟环境中安装 gdal 可以按照以下步骤 xff1a 1 打开Anaconda Prompt或者终端 xff0c 激活创建的虚拟环境 xff0c 比如 xff1a conda activate your
  • Ubuntu远程部署及访问jupyter

    一 Ubuntu下安装jupyter notebook 创建虚拟环境 conda create n myjupyter python 61 3 9 激活虚拟环境 conda activate myjupyter 安装jupyter pip
  • postgresql 日志配置

    配置文件日志部分参数说明 REPORTING AND LOGGING Where to Log log destination 61 39 stderr 39 Valid values are combinations o
  • Postgresql 14配置文件解释说明

    Postgresql 14配置文件postgresql conf的解释说明 Postgresql 14配置文件 xff0c 配置项翻译及解释说明 suntoon 64 postgres14 data sudo nano postgresql
  • C++标准库之迭代器

    迭代器是对指针进行进一步抽象的产物 迭代器是遍历所有容器 xff08 序列 xff09 流的统一界面 xff0c 是标准库泛形算法的基础 迭代器根据其能力分为五种 xff1a categorypropertiesvalid expressi