c++ std::next总结

std::next 是 C++ 标准库中的一个实用函数,用于从一个迭代器向前移动指定步数,并返回移动后的迭代器。它不会修改原始迭代器,而是返回一个新迭代器。

函数原型

// c++11后,c++17前
template< class ForwardIt >
ForwardIt next(ForwardIt it, typename std::iterator_traits<ForwardIt>::difference_type n = 1);// c++17后
template< class InputIt >
constexpr
InputIt next( InputIt it, typename std::iterator_traits<InputIt>::difference_type n = 1 );
  • 参数说明

    • it:起始迭代器。
    • n(可选):向前移动的步数,默认为 1。可以为正(向前移动)或零(当前位置),也可以为负值(适用于双向迭代器或随机访问迭代器)。
  • 返回值:

    • 返回移动 n 步后的新迭代器。如果 n = 0,返回与 it 相同的迭代器。
  • 要求:

    • std::next适用于 前向迭代器(Forward Iterator) 及更高级的迭代器类型(双向迭代器、随机访问迭代器)。
    • 如果移动超出容器边界,行为未定义。

示例

向前移动(默认 1 步)

#include <iostream>
#include <vector>
#include <iterator>  // std::nextint main() {std::vector<int> vec = {10, 20, 30, 40, 50};// 获取起始迭代器auto it = vec.begin();// 使用 std::next 移动一步auto next_it = std::next(it);std::cout << "Current element: " << *it << std::endl;       // 输出 10std::cout << "Next element: " << *next_it << std::endl;    // 输出 20return 0;
}

移动多步

#include <iostream>
#include <vector>
#include <iterator>  // std::nextint main() {std::vector<int> vec = {10, 20, 30, 40, 50};// 获取起始迭代器auto it = vec.begin();// 使用 std::next 移动三步auto third_it = std::next(it, 3);std::cout << "Third element: " << *third_it << std::endl;  // 输出 40return 0;
}

与负值配合使用

std::next不支持负值,但可以使用 std::prev(反向移动)来实现类似的功能。

#include <iostream>
#include <list>
#include <iterator>  // std::next, std::prevint main() {std::list<int> lst = {10, 20, 30, 40, 50};// 获取终止迭代器auto end_it = lst.end();// 使用 std::prev 获取倒数第二个元素auto second_last_it = std::prev(end_it, 2);std::cout << "Second last element: " << *second_last_it << std::endl;  // 输出 40return 0;
}

总结

函数功能修改原始迭代器返回新迭代器
std::next将迭代器向前移动 n
std::prev将迭代器向后移动 n
std::advance将迭代器向前或向后移动 n

主要用途:

  • 便捷获取目标位置的迭代器:无需手动调用迭代器的递增操作。

  • 与算法配合使用:例如在 std::findstd::for_each 等算法中定位迭代器。

  • 安全性:不直接修改原始迭代器,提高代码的清晰度和可读性。

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

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

相关文章

FreeRTOS信号量(二)

目录 1、计数型信号量简介 1、事件计数 2、资源管理 2、创建计数型信号量 ​编辑1、函数xSemaphoreCreateCounting() 2、函数xSemaphoreCreateCountingStatic() 3 、计数型信号量创建过程分析 4、释放和获取计数信号量 信号量的释放 1 、函数 xSemaphoreGive() 2、函…

加载指定会话最近消息

加载指定会话最近消息 前言 上一集我们就把三个标签页的加载列表的任务给完成啦&#xff01;那么我们这一集就来完成加载指定绘画最近消息的任务。 需求分析 我们点击了某个会话之后&#xff0c;我们就会去显示我们的会话的最近的N条消息。请看下图。 我们这里涉及到两个区…

SpringBoot3+SpringDataJPA+Ehcache3做分页查询的缓存优化

前言&#xff1a;关于集成Ehcache3的集成&#xff0c;需要了解的可以出门左转&#xff1a; https://blog.csdn.net/qq_42755868/article/details/143870473 这里 本文也是基于这个前置条件写的。大佬可以忽略哈。 基于上文&#xff1a;我们在做分页查询的时候&#xff0c;可以…

VS2022进行Libigl库编译

目录 一 编译OK 二 编译难点 2.1 cmake问题 2.2 文件编码问题 三 调用链接 一 编译OK 二 编译难点 2.1 cmake问题 vs2022直接多次cmake生成即可。 2.2 文件编码问题 格式保存为GB2312. 三 调用链接 https://github.com/libigl/libigl-example-project

风尚云网前端学习:一个简易前端新手友好的HTML5页面布局与样式设计

风尚云网前端学习&#xff1a;一个简易前端新手友好的HTML5页面布局与样式设计 简介 在前端开发的世界里&#xff0c;HTML5和CSS3是构建现代网页的基石。本文将通过一个简单的HTML5页面模板&#xff0c;展示如何使用HTML5的结构化元素和CSS3的样式特性&#xff0c;来创建一个…

返回流类型接口的错误信息处理

返回流类型接口的错误信息处理 前言axios拦截器src/utils/request.ts对应接口 前言 返回流类型接口需要在响应成功回调里拦截&#xff0c;且该接口的status始终是200&#xff0c;尽管后端返回的code可能是非2xx&#xff0c;因此返回流类型的接口&#xff0c;其错误信息需要单独…

SMMU软件指南操作之翻译过程概述

安全之安全(security)博客目录导读 下图展示了每个传入事务&#xff08;transaction&#xff09;所经过的简化过程。本节描述了顶层翻译过程。 一个传入事务遵循以下步骤&#xff1a; 1. 如果 SMMU 被全局禁用&#xff0c;事务将直接通过 SMMU 而不进行任何地址改变。全局属性…

特征交叉-MaskNet文章总结代码实现

MaskNet 这个模型是微博21年提出的&#xff0c;23年twitter(X)开源的推荐系统排序模块使用的backbone结构。 核心思想是认为DNN为主的特征交叉是addictive&#xff0c;交叉效率不高&#xff1b;所以设计了一种multiplicatvie的特征交叉 如何设计muliplicative特征交叉呢&#x…

QT 实现仿制 网络调试器(未实现连接唯一性) QT5.12.3环境 C++实现

网络调试助手&#xff1a; 提前准备&#xff1a;在编写代码前&#xff0c;要在.pro工程文件中&#xff0c;添加network模块。 服务端&#xff1a; 代码&#xff1a; widget.h #ifndef WIDGET_H #define WIDGET_H#include <QWidget> #include <QtWidgets> #inclu…

Vscode写markdown快速插入python代码

如图当我按下快捷键CRTLSHIFTK 自动出现python代码片段 配置方法shortcuts’ 打开这个json文件 输入 {"key": "ctrlshiftk","command": "editor.action.insertSnippet","when": "editorTextFocus","args&…

【案例】泛微.齐业成助力北京中远大昌汽车实现数电票全流程管理

中远大昌统一发票共享平台上线三个多月以来&#xff0c;实现&#xff1a; 5000份 60000元 发票开具 成本节约 客户简介及需求分析 北京中远大昌汽车服务有限公司&#xff08;以下简称“中远大昌”&#xff09;成立于2002年&#xff0c;是中远海运集团所属香远&#xff08;北…

使用docker快速部署Nginx、Redis、MySQL、Tomcat以及制作镜像

文章目录 应用快速部署NginxRedisMySQLTomcat 制作镜像镜像原理基于已有容器创建使用 Dockerfile 创建镜像指令说明构建应用创建 Dockerfile 文件创建镜像 应用快速部署 Nginx docker run -d -p 80:80 nginx使用浏览器访问虚拟机地址 Redis docker pull redis docker run --…

雅思阅读TFNG题型7大解题思路

雅思阅读TFNG题型7大解题思路&#xff0c;全在这了‼️ ⚠️在徘徊在6-6.5的同学有很大的共性就是对题型不够熟悉&#xff0c;我记得我当时卡6.5的时候我有时候分不清NG和F&#xff0c;有时候又分不清NG 和True&#xff0c;也不知道他有哪几种考我的方法&#xff0c;脑子里没有…

家政服务系统开发,智慧家政,便捷生活

近年来&#xff0c;大众对家政服务的需求不断增加&#xff0c;家政服务种类也逐渐多样化&#xff0c;涵盖了日常生活中的各个方面&#xff0c;为大众带来更急优质的服务&#xff0c;进一步提升了家政市场的发展。 在数字化发展的推动下&#xff0c;互联网家政服务的模式应运而…

重生之我在学环境变量

环境变量 基本概念 环境变量(environment variables)一般是指在操作系统中用来指定操作系统运行环境的一些参数如&#xff1a;我们在编写C/C代码的时候&#xff0c;在链接的时候&#xff0c;从来不知道我们的所链接的动态静态库在哪里&#xff0c;但 是照样可以链接成功&#…

Failed to start Docker Application Container Engine

说明&#xff1a; 1&#xff09;访问应用业务&#xff0c;读取不到数据&#xff0c;show databases;查看数据库报错 2&#xff09;重启docker服务&#xff0c;服务启动失败&#xff0c;查看日志报错如下图所示 3&#xff09;报错信息&#xff1a;chmod /data/docker: read-only…

SQL 语句执行计划中的连接方式

SQL 语句执行计划中的连接方式 join操作 join操作基本分为3大类&#xff1a;外连接&#xff08;细分为&#xff1a;左连接&#xff08;Left outer join/ left join&#xff09;、右连接&#xff08;right outer join/ right join&#xff09;、全连接&#xff08;full outer …

FileProvider高版本使用,跨进程传输文件

高版本的android对文件权限的管控抓的很严格,理论上两个应用之间的文件传递现在都应该是用FileProvider去实现,这篇博客来一起了解下它的实现原理。 首先我们要明确一点,FileProvider就是一个ContentProvider,所以需要在AndroidManifest.xml里面对它进行声明: <provideran…

golang 嵌入式armv7l压缩编译打包

编译 Go 应用程序 go build -ldflags"-s -w" -o myapp.exe . 使用 UPX 压缩可执行文件&#xff08;window下载并设置环境变量&#xff09; upx --best --lzma myapp.exe 可从10M压缩到1M 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 …

45.坑王驾到第九期:Mac安装typescript后tsc命令无效的问题

点赞收藏加关注&#xff0c;你也能主打别墅&#xff01; 一、问题描述 Mac上终端运行如下命令&#xff1a; sudo npm install typescript -g //全局安装ts提示成功安装后&#xff0c;我测试tsc -v这个命令时出现如下错误&#xff1a; 也就是说找不到 tsc 命令。 二、解决方…