move std 函数 示例_C++ STL迭代器辅助函数

advance(it, n)           ---------- it 表示某个迭代器,n 为整数。该函数的功能是将 it 迭代器前进或后退 n 个位置。distance(first, last)    ---------- first 和 last 都是迭代器,该函数的功能是计算 first 和 last 之间的距离。begin(cont)              ---------- cont 表示某个容器,该函数可以返回一个指向 cont 容器中第一个元素的迭代器。end(cont)                ---------- cont 表示某个容器,该函数可以返回一个指向 cont 容器中最后一个元素之后位置的迭代器。prev(it)                 ---------- it 为指定的迭代器,该函数默认可以返回一个指向上一个位置处的迭代器。注意,it 至少为双向迭代器next(it)                 ---------- it 为指定的迭代器,该函数默认可以返回一个指向下一个位置处的迭代器。注意,it 最少为前向迭代器。

本节先讲解 advance() 函数,其他函数后续章节会做详细介绍。

advance() 函数用于将迭代器前进(或者后退)指定长度的距离,其语法格式如下:

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

其中 it 指的是目标迭代器,n 通常为一个整数。

需要注意的是,如果 it 为输入迭代器或者前向迭代器,则 n 必须为一个正数,即表示将 it 右移(前进) n 个位置;反之,如果 it 为双向迭代器或者随机访问迭代器,则 n 为正数时表示将 it 右移(前进) n 个位置,n 为负数时表示将 it 左移(后退) n 个位置。

另外,根据 it 类型是否为随机访问迭代器,advance() 函数底层采用了不同的实现机制:

1.当 it 为随机访问迭代器时,由于该类型迭代器支持 p+n 或者 p-n(其中 p 就是一个随机访问迭代器)运算,advance() 函数底层采用的就是 it+n 操作实现的;

2.当 it 为其他类型迭代器时,它们仅支持进行 ++ 或者 -- 运算,这种情况下,advance() 函数底层是通过重复执行 n 个 ++ 或者 -- 操作实现的。

值得一提的是,advance() 函数定义在头文件,并位于 std 命名空间中。因此,程序在使用该函数之前,应包含如下 2 行代码:

#include using namespace std;示例:#include      // std::cout#include      // std::advance#include using namespace std;int main() {    //创建一个 forward_list 容器    forward_list mylist{1,2,3,4};    //it为前向迭代器,其指向 mylist 容器中第一个元素    forward_list::iterator it = mylist.begin();    //借助 advance() 函数将 it 迭代器前进 2 个位置    advance(it, 2);    cout << "*it = " << *it;    return 0;}

程序执行结果为:

*it = 3

此程序中,由于 it 为前向迭代器,其只能进行 ++ 操作,即只能前进(右移),所以 advance() 函数的第 2 个参数只能为正数。

下面程序以 vector 容器为例,演示了 advance() 函数的功能:

#include      // std::cout#include      // std::advance#include using namespace std;int main() {    //创建一个 vector 容器    vector myvector{1,2,3,4};    //it为随机访问迭代器,其指向 myvector 容器中第一个元素    vector::iterator it = myvector.begin();    //借助 advance() 函数将 it 迭代器前进 2 个位置    advance(it, 2);    cout << "1、*it = " << *it << endl;    //继续使用it,其指向 myvector 容器中最后一个元素之后的位置    it = myvector.end();    //借助 advance() 函数将 it 迭代器后退 3 个位置    advance(it, -3);    cout << "2、*it = " << *it;    return 0;}

程序执行结果为:

1、*it = 32、*it = 2

注意,advance() 函数本身不会检测 it 迭代器移动 n 个位置的可行性,如果 it 迭代器的移动位置超出了合理范围,it 迭代器的指向将无法保证,此时使用 *it 将会导致程序崩溃。

8c27795d7baa5824d156cfffbd94b9ea.png

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/525927.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

小米air耳机重新配对_横比小米 Air 2s 和 OPPO Enco W31:同一颗芯玩出的大不同

2019 年 9 月&#xff0c;小米发布了新一代小米真无线蓝牙耳机 Air 2&#xff0c;采用半入耳式设计、支持蓝牙连接时的弹窗动画、支持小爱同学语音交互&#xff0c;价格依旧平民的 399 元&#xff0c;是小米高级产品总监李创奇眼中「一款体验接近 AirPods 的产品」。时隔半年&a…

裸金属服务器能虚拟化吗,裸金属服务器虚拟化概述

裸金属服务器虚拟化概述 内容精选换一换华为云帮助中心&#xff0c;为用户提供产品简介、价格说明、购买指南、用户指南、API参考、最佳实践、常见问题、视频帮助等技术文档&#xff0c;帮助您快速上手使用华为云服务。SAP HANA运行在裸金属服务器上。需要根据部署场景&#xf…

获得分辨率_变分辨率宽幅面光固化3D打印,

作者 陈锐光&#xff0c;连芩 光固化3D打印以实现高分辨率著称&#xff0c;使用面曝光方式的设备还具有成型速度快的优点。但传统的面曝光设备存在着实现宽幅面和高分辨率的矛盾&#xff0c;由于镜头像素的限制&#xff0c;在提高其中一项性能的时候&#xff0c;会牺牲另一项。…

后宫宛如传服务器维护,合服丨《后宫宛如传》合服公告

合服活动活动时间&#xff1a; 3月25日合服结束后 至 4月8日 23:59:59※活动期间 任意5天&#xff0c;每天登录即可领取一份奖励&#xff0c;奖励包括 服装单品和 道具。累计登录5天并领取活动奖励&#xff0c;即可获得 限定套装泼墨流裙。※服装细节(点击图片查看大图)合服规则…

属性子集选择的基本启发方法_一文看懂数据预处理最重要的3种思想和方法

导读&#xff1a;本文我们考虑应当采用哪些预处理步骤&#xff0c;让数据更加适合挖掘。数据预处理是一个广泛的领域&#xff0c;包含大量以复杂的方式相关联的不同策略和技术。我们将讨论一些最重要的思想和方法&#xff0c;并试图指出它们之间的相互联系。作者&#xff1a;陈…

荣耀系统更新服务器不可用,荣耀确认系统更新方式 4月1日前发布的机型固件升级由华为负责...

近期&#xff0c;根据华为陆续发布的荣耀老机型鸿蒙HarmonyOS的路线图来看&#xff0c;荣耀手机 、平板等12款机型已经赫然在列。而随后&#xff0c;也引起了网友们对于荣耀产品系统更新的讨论&#xff0c;毕竟华为与荣耀分家之后&#xff0c;对于荣耀产品的系统更新一直是不少…

一个服务器上放多个网站,一个云服务器放多个网站吗

一个云服务器放多个网站吗 内容精选换一换如果您使用华为云云速邮箱作为企业邮箱&#xff0c;并在Web端管理使用&#xff0c;此时需要为邮箱绑定域名&#xff0c;通过域名访问网页版邮箱。本节介绍使用华为云云速邮箱&#xff0c;且网站域名解析至中国大陆节点服务器的网站备案…

electron开发_基于Electron+React的跨平台应用程序基础开发框架

介绍Electron React Boilerplate是Github上超过12kstar的可扩展跨平台应用程序开发框架&#xff0c;Electron 是基于HTMLCSSJavascript等 Web 技术创建原生程序的框架&#xff0c;它已经帮我们搞定了最难搞的部分&#xff0c;而Electron React Boilerplate在其基础上进行了扩展…

挂机宝和网站服务器,挂机宝SSD硬盘vs普通硬盘访问官网哪个快?

原标题&#xff1a;挂机宝SSD硬盘vs普通硬盘访问官网哪个快&#xff1f;秒开云硬盘篇&#xff1a;SSD固态硬盘vs机械硬盘硬盘读写速度越快结构类型。网络服务器中的固态盘(SSD)比SATA磁盘驱动器给予更高的电脑磁盘读/写强度&#xff0c;也称之为键入/导出(I/O)性能指标。具备SS…

++递归 字符串全排列_超全递归技巧整理,这次一起拿下递归

0. 前言大家好&#xff0c;我是多选参数的程序锅&#xff0c;一个正在 neng 操作系统、学数据结构和算法以及 Java 的硬核菜鸡。本篇将主要介绍递归相关的内容&#xff0c;下面是本篇的内容提纲。1. 递归基础★ 争哥&#xff1a;从我自己学习数据结构和算法的经历来看&#xff…

图片合成gif_谈谈有哪些好用的制作GIF的方式

今天咱们谈谈计算机上几种制作 GIF 的方式&#xff0c;而且他们都是免费的&#xff0c;但可能需要你会一点计算机操作技能。本文会简单的介绍一些常用的GIF软件&#xff0c;比较一下功能和上手程度。常见的GIF录制方式大概有这么几种方式&#xff1a; 直接录制 , 视频转GIF &am…

提权命令_利用Linux文本操作命令ed进行提权

本文我将为大家介绍一个面向行的文本编辑器命令“ed”&#xff0c;它主要用于生成&#xff0c;显示&#xff0c;更改和操作文本文件。所有ed命令都在行或行范围内执行操作&#xff1b;例如&#xff0c;“d”命令删除行&#xff1b;“m”命令移动行&#xff0c;“t”命令复制行等…

接口有个电池标志_有人说手机快充毁电池,真的假的?电池快充的原理是什么?...

出门只带一部手机&#xff0c;已成为多数人的生活现状&#xff0c;电池作为手机的心脏&#xff0c;最怕的就是找不到地方“补充能量”但越来越先进的手机“快充”技术&#xff0c;让“充电5分钟&#xff0c;通话2小时”逐渐成为了现实。那么用手机快充时&#xff0c;充电头和充…

10进制转换16进制补足0_信息技术教师资格必考内容——进制换算(一)

前两天给大家整理了信息技术教师资格笔试科目三的必考内容&#xff0c;戳蓝字回顾弄懂这些&#xff0c;信息技术教师资格笔试提高30分&#xff01;信息技术教师资格笔试——这道20分的题居然这么简单&#xff01;有小伙伴问还有哪些必考内容进制换算也是必考内容&#xff0c;来…

mysql中正则表达式的用法_mysql之正则表达式的用法

正则表达式用来匹配文本的特殊字符集合格式&#xff1a;在where查询中使用regexp关键字&#xff0c;后面接正则表达式字符正则表达式与like的区别like匹配整列数据regexp可以匹配列中任意位置的字符&#xff0c;更加灵活&#xff0c;更强大。用like模糊匹配&#xff0c;查询字段…

mysql more命令_more命令

more命令&#xff0c;功能类似 cat &#xff0c;cat命令是整个文件的内容从上到下显示在屏幕上。 more会以一页一页的显示方便使用者逐页阅读&#xff0c;而最基本的指令就是按空白键(space)就往下一页显示&#xff0c;按 b 键就会往回(back)一页显示&#xff0c;而且还有搜寻字…

mysql 如何添加索引_MySQL如何创建一个好索引?创建索引的5条建议【宇哥带你玩转MySQL 索引篇(三)】...

MySQL如何创建一个好索引&#xff1f;创建索引的5条建议过滤效率高的放前面对于一个多列索引&#xff0c;它的存储顺序是先按第一列进行比较&#xff0c;然后是第二列&#xff0c;第三列...这样。查询时&#xff0c;如果第一列能够排除的越多&#xff0c;那么后面列需要判断的行…

mysql的存储引擎详解_MySQL常见存储引擎详解

通过执行show engines命令查看MySQL中支持哪些存储引擎MySQL存储引擎属性对比设置表的存储引擎的方法在my.cnf配置文件中设置default-storage-engine参数表示设置默认存储引擎在MySQL的连接上设置当前连接的默认存储引擎mysql> set default_storage_engineinnodb;创建表的时…

mysql锁场景_MySQL死锁系列-常见加锁场景分析

在上一篇文章《锁的类型以及加锁原理》主要总结了 MySQL 锁的类型和模式以及基本的加锁原理&#xff0c;今天我们就从原理走向实战&#xff0c;分析常见 SQL 语句的加锁场景。了解了这几种场景&#xff0c;相信小伙伴们也能举一反三&#xff0c;灵活地分析真实开发过程中遇到的…

kubectl logs -f tail 显示100_系统管理员应该知道的9个kubectl命令

kubectl是Kubernetes的一个命令行管理工具&#xff0c;可用于Kubernetes上的应用部署和日常管理。本文列举了9个常见的kubectl命令&#xff0c;并对每个命令进行了简单扼要的介绍&#xff0c;供大家参考。同时&#xff0c;大家也可以通过文中连接获取更详细的介绍。如今&#x…