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,一经查实,立即删除!

相关文章

网页微博连接不上服务器,新浪微博网络出错加载不了怎么办

1. 手机上新浪微博显示网络连接失败2. 手机登陆新浪微博为什么显示网络连接失败3. 微博老是出现网络出错,重新加载怎么办手机上新浪微博显示网络连接失败困扰了一天刚解决了1电脑上微博授权应用中取消手机客户端授权(不同手机型号应用名称应该不同)2改密码不要用标点符号我就是…

小米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;对于荣耀产品的系统更新一直是不少…

西建大历年电子与通信工程复试真题_学姐分享2020年西安电子科技大学电子与通信工程考研初复试经验指导...

大家好&#xff0c;我是西安电子科技大学电子工程学院上岸的研一学姐&#xff0c;专业是电子与通信工程&#xff0c;考研一路走来&#xff0c;通过自己摸索&#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;充电头和充…

c++ string 回文串_C++刷题——2802: 判断字符串是否为回文

Description编写程序&#xff0c;判断输入的一个字符串是否为回文。若是则输出“Yes”&#xff0c;否则输出“No”。所谓回文是指順读和倒读都是一样的字符串。InputOutputSample InputabcddcbaSample OutputYes/* Copyright (c) 2014, 烟台大学计算机学院* All rights reserve…

python 网络运维框架scape_“python scape 教程“求PhotoScape X Pro for Mac软件

ArcGIS知乎上有哪些干货可以推荐埃里克.卡普《本书书名无法描述本书内容一场逗你玩的探险》(英文名Does Santa Exist?——A Philosophical Investigation》)推荐理由&#xff1a;本书的作者是《生活大爆炸》的编剧&#xff0c;如果你喜欢《生活大爆炸》&#xff0c;那么这本书…

KWin、libdrm、DRM从上到下全过程 —— drmModeAddFBxxx(32)

接前一篇文章:KWin、libdrm、DRM从上到下全过程 —— drmModeAddFBxxx(31) 上一回完成了对drm_gem_open函数的解析。本回开始对drm_gem_handle_create_tail函数进行解析。 为什么突然出现了个drm_gem_handle_create_tail函数?别忘了当初我们是在KWin、libdrm、DRM从上到下…

v8引擎和v12引擎_v8和v12发动机的区别

v12发动机的汽缸数量更多&#xff0c;运转平顺性更好。v12发动机与v8发动机的排量是无法对比的&#xff0c;有些v8发动机的排量比v12发动机的排量都要大。v8发动机和v12发动机只能在一些超跑或高性能汽车上见到。v12和v8发动机的v代表这种发动机的汽缸呈v字形排列&#xff0c;并…

python二重积分0到正无穷_python函数的数值二重积分

我有点困在一个函数上&#xff0c;我试图通过scipy&#xff0c;python进行数值积分。在为了简单起见&#xff0c;我将函数定义为&#xff1a;integral f(x,y) SUM[double integral(axby)dxdy]a和b是常数&#xff0c;但对于每个积分的方程&#xff0c;它们是不同的。我已经将每个…