std::ranges::iota
std::ranges::iota_view
和 std::views::iota
是 C++23 Ranges 库中的一部分,用于生成一系列递增的值,类似 Python 的 range()
或传统的 for
循环生成器。
一 原形
Defined in header | ||
Call signature | ||
template< std::input_or_output_iterator O, std::sentinel_for<O> S, std::weakly_incrementable T > | (1) | (since C++23) |
template< std::weakly_incrementable T, ranges::output_range<const T&> R > constexpr iota_result<ranges::borrowed_iterator_t<R>, T> iota( R&& r, T value ); | (2) | (since C++23) |
Helper types | ||
template< class O, class T > | (3) | (since C++23) |
Fills the range [
first,
last)
with sequentially increasing values, starting with value and repetitively evaluating ++value.
Equivalent operation:
*(first) = value; *(first + 1) = ++value; *(first + 2) = ++value; *(first + 3) = ++value; ...
Parameters
first, last | - | the iterator-sentinel pair defining the range of elements to fill with sequentially increasing values starting with value |
value | - | initial value to store; the expression ++value must be well-formed |
Return value
{last, value + ranges::distance(first, last)}
Complexity
Exactly last - first increments and assignments.
二、用途
std::views::iota(start)
生成从 start
开始的 无限递增序列
std::views::iota(start, stop)
生成从 start
开始,到 不包括 stop 的 有限递增序列
✅ 三、示例用法
示例 1:生成有限整数序列
#include <ranges>
#include <iostream>int main()
{for (int i : std::views::iota(0, 5)) {std::cout << i << ' ';}std::cout << '\n';
}
输出:
0 1 2 3 4
示例 2:无限序列 + 截断
#include <ranges>
#include <iostream>int main()
{auto infinite = std::views::iota(10); // 无限递增从10开始for (int i : infinite | std::views::take(5)) {std::cout << i << ' ';}std::cout << '\n';
}
输出:
10 11 12 13 14
示例 3:与自定义类型(如枚举或结构体)一起使用
你可以使用 std::views::iota
生成 enum
, char
, 或 std::chrono::time_point
等递增类型:
#include <ranges>
#include <iostream>struct Test
{int value;static constexpr int min = 0;static constexpr int max = 3;// 构造函数constexpr Test(int v = min) : value(v) {}// operator++ (前置递增)Test& operator++() {if (value < max) {++value;}return *this;}// 比较运算符friend constexpr bool operator==(Test lhs, Test rhs) {return lhs.value == rhs.value;}friend constexpr bool operator!=(Test lhs, Test rhs) {return !(lhs == rhs);}friend constexpr bool operator<(Test lhs, Test rhs) {return lhs.value < rhs.value;}
};int main()
{for (Test c : std::views::iota(Test::min, Test::max)) {std::cout << c.value << ' ';}
}
要求类型支持 operator++
(即满足 std::weakly_incrementable
)。
四、特性总结
特性 | 描述 |
---|---|
惰性生成 | 元素按需生成,不占用内存 |
无限或有限序列 | 可以无限增长,也可以指定边界 |
类型支持 | 任何可自增类型,如整数、枚举、时间点 |
常与 views::take 配合 | 限制无限序列长度 |
范围特性 | 支持 forward range,支持迭代算法 |
五、组合使用案例
生成带序号的字符串:
#include <iostream>
#include <ranges>
#include <string>int main()
{auto greetings = std::views::iota(1)| std::views::take(3)| std::views::transform([](int i) {return "Hello " + std::to_string(i);});for (auto&& s : greetings) {std::cout << s << '\n';}
}
输出:
Hello 1
Hello 2
Hello 3
常见误区
错误用法 | 正确方式 |
---|---|
iota(0, n + 1.5) (混类型) | 确保起始和终止类型一致 |
iota(begin, end) 忘记终止值 | 无限序列需要 take 来终止 |
用于不支持 ++ 的类型 | 类型需支持自增(++ ) |
🧾 总结表
形式 | 描述 |
---|---|
std::views::iota(5) | 无限递增从 5 开始 |
std::views::iota(5, 10) | 有限递增:5 到 9 |
iota_view<char>('a', 'z'+1) | 生成 a~z 字符 |
views::iota(tp1, tp2) | 生成时间点 range(C++20) |
相关文章:
std::ranges::iota
std::ranges::iota_view 和 std::views::iota 是 C23 Ranges 库中的一部分,用于生成一系列递增的值,类似 Python 的 range() 或传统的 for 循环生成器。 一 原形 Defined in header <numeric> Call signature template< std::input_or_output…...
C++(24):容器类<list>
目录 一、核心概念 二、基本语法 1. 声明与初始化 2.添加元素 3.访问与遍历 4. 删除元素 三、特点 1. 高效插入/删除 2. 不支持随机访问 3. 特有成员函数 4. 内存与性能 四、示例代码 五、成员函数 六、使用场景 七、注意事项 Lists将元素按顺序储…...
【C++】不推荐使用的std::allocator<void>
文章目录 不推荐使用的std::allocator<void>1. 核心区别2. 成员函数对比(1) allocate 和 deallocate(2) construct 和 destroy 3. 设计动机(1) std::allocator<T>(2) std::allocator<void> 4. 使用场景示例(1) std::allocator<int>(2) std::allocator&…...

基于OAuth2+SpringSecurity+Jwt实现身份认证和权限管理后端服务
1、简介 本文讲述了如何实现简易的后端鉴权服务。所谓“鉴权”,就是“身份鉴定”“权限判断”。涉及的技术有:OAuth2、SpringSecurity、Jwt、过滤器、拦截器。OAuth2用于授权,使用Jwt签发Access Token和Refresh Token,并管理token…...
vue3 el-table实现字段可编辑
在Vue 3中,如果你想让el-table(Element Plus的表格组件)的字段可编辑,你可以通过以下方式来实现: 使用cell-mouse-enter和cell-mouse-leave事件动态显示编辑图标或控件 你可以在鼠标进入单元格时显示一个编辑图标或输…...
基于React的高德地图api教程005:圆形标记的绘制、删除、修改
文章目录 5、圆形绘制和编辑5.1 绘制圆5.1.1 添加绘制圆按钮5.1.2 点击地图绘制圆心5.2 修改圆5.2.1 修改圆的基本信息5.2.2 修改圆的位置和大小5.3 删除圆标记5.4 定位到圆5.5 代码下载5.05、圆形绘制和编辑 5.1 绘制圆 5.1.1 添加绘制圆按钮 实现代码: {!isActiveDrawCi…...

liunx定时任务,centos定时任务
yum install cronie crontabs -y直接运行 crond -n 在前台运行 crond -i 守护进程在没有inotify支持的情况下运行systemctl service crond start # 启动服务 systemctl enable crond.service # 设置开机自启 sudo systemctl restart crond # 重启 cron 服务systemctl serv…...

三种嵌入式开发常用的组网方式
一、三种嵌入式开发常用的组网方式 这里记录了三种嵌入式开发常用的网络环境,最终目标也就是让开发板、虚拟机、物理机在同一个局域网下。一般的网络环境下都非常容易实现,但是对于学生校园网可得想些法子了,因为校园网一般会有设备连接数限…...

ubuntu 20.04 ping baidu.coom可以通,ping www.baidu.com不通 【DNS出现问题】解决方案
ping baidu.coom可以通,ping www.baidu.com不通【DNS出现问题】解决方案 检查IPV6是否有问题 # 1. 检查 IPv6 地址,记住网络接口的名称 ip -6 addr show# 2. 测试本地 IPv6,eth0换成自己的网络接口名称 ping6 ff02::1%eth0# 3. 检查路由 ip…...

城市排水管网流量监测系统解决方案
一、方案背景 随着工业的不断发展和城市人口的急剧增加,工业废水和城市污水的排放量也大量增加。目前,我国已成为世界上污水排放量大、增加速度快的国家之一。然而,总体而言污水处理能力较低,有相当部分未经处理的污水直接或间接排…...

Ubuntu Desktop QEMU/KVM中使用Ubuntu Server 22.04配置k8s集群
Ubuntu Desktop QEMU/KVM中使用Ubuntu Server 22.04配置k8s集群 1.本机部署个代理 这里我是自己用dockersing-box 部署的 http://192.168.2.105:10808 如果 用v2rayN等软件部署的,记得开启局域网共享 2.安装虚拟机 我本机使用的是Ubuntu Desktop ,这里在QEMU/K…...

YOLOv8 在单片机上的几种部署方案
YOLOv8 在单片机上的部署方案 单片机资源(如内存、计算能力)有限,直接部署完整的 YOLOv8 模型并不现实。不过,我们可以通过模型量化、优化和使用轻量级框架来实现简化版的目标检测。下面为你介绍几种可行的方案: 方案…...

后端框架(1):Mybatis
什么是框架? 盖高楼,框架结构。 框架结构就是高楼的主体,基础功能。 把很多基础功能已经实现了(封装了)。 在基础语言之上,对各种基础功能进行封装,方便开发者,提高开发效率。 mybatis:对jd…...

linux下tcp/ip网络通信笔记1,
本文章主要为博主在学习网络通信的笔记一个Udp_echo_server,和client的代码实现 1,网络发展,网络协议,意识到网络通信——不同主机的进程间通信, 2,学习如何在应用层调用系统提供的接口进行通信,echo_Udp…...
SqlHelper 实现类,支持多数据库,提供异步操作、自动重试、事务、存储过程、分页、缓存等功能。
/// <summary> /// SqlHelper 实现类,支持多数据库,提供异步操作、自动重试、事务、存储过程、分页、缓存等功能。 /// </summary> public class SqlHelper : IDbHelper {private readonly IDbConnectionFactory _connectionFactory;private…...

语音识别——声纹识别
通过将说话人的声音与数据库中的记录声音进行比对,判断说话人是否为数据库白名单中的同一人,从而完成语音验证。目前,3D-Speaker 声纹验证的效果较为出色。 3D-Speaker 是一个开源工具包,可用于单模态和多模态的说话人验证、说话…...

window 显示驱动开发-报告图形内存(三)
图形内存报告示例 示例 1:笔记本电脑上的 128 MB 专用板载图形内存 以下屏幕截图显示了使用 Intel Iris 离散图形适配器运行 Windows 11 的 Surface 笔记本电脑的计算图形内存数。 适配器的可用内存总数为 16424 MB,用于图形用途,细分如下&…...
安全运维 -- linux磁盘挂载到windows
0x00 背景 一个需求需要将linux服务器文件同步到windows。在此过程中遇到了三连报错,特此记录一下。 0x00 error 1 一开始死活挂不上,报错 mount: /mnt/Folder: mount(2) system call failed: No route to host. 一开始以为是dns问题,其实…...
使用 Apache POI 生成 Word 文档
创建一个包含标题、段落和表格的简单文档。 步骤 1:添加依赖 确保你的项目中已经添加了 Apache POI 的依赖。如果你使用的是 Maven,可以在 pom.xml 中添加以下内容: <dependency><groupId>org.apache.poi</groupId>...
高防服务器流量“清洗”什么意思
在当今数字化的时代,网络安全成为了备受关注的焦点。其中,高防服务器流量“清洗”这个概念,对于许多朋友来说可能还比较陌生。今天,就让我们一起来揭开它神秘的面纱。 首先,咱们得明白,高防服务器流量“清…...

UE5 GAS框架解析内部数据处理机制——服务器与客户端
当, gas通过点击鼠标光标触发事件时,内部的处理机制。 当通过点击事件,命中中目标时, 可获取到对应的TargetData 目标数据。处理相应的操作。 仅有本地的客户端的情况下。命中并不会有什么异常。 当存在服务器时, 服…...
Unity实用技能-UI定位总结
实用技能系列 Unity实用技能-UI滑动条技能总结Unity实用技能-UI规范总结Unity实用技能-协作规范总结Unity实用技能-UI与粒子效果总结 文章目录 实用技能系列前言什么是定位UI怎么实现定位UI总结 前言 本周接触了UI和定位相关的工作,记录一下 什么是定位UI 一般就是…...

开源GPU架构RISC-V VCIX的深度学习潜力测试:从RTL仿真到MNIST实战
点击 “AladdinEdu,同学们用得起的【H卡】算力平台”,H卡级别算力,按量计费,灵活弹性,顶级配置,学生专属优惠。 一、开篇:AI芯片架构演变的三重挑战 (引述TPUv4采用RISC-V的行业案…...
服务间的“握手”:OpenFeign声明式调用与客户端负载均衡
现在,假设我们有一个新的order-service,它在创建订单时需要获取用户信息。 如果order-service直接硬编码user-service的IP和端口进行调用,会面临以下问题: 缺乏弹性: 如果user-service实例的IP或端口发生变化(在云环境…...
26、DAPO论文笔记(解耦剪辑与动态采样策略优化,GRPO的改进)
DAPO论文笔记 1、项目背景与目标2、DAPO算法与关键技术3、过长响应奖励塑形(Overlong Reward Shaping)**一、问题背景:截断惩罚的缺陷****二、解决方案:分层惩罚与软截断策略**1. **过长过滤:屏蔽无效惩罚**2. **软过长…...
JQuery 禁止页面滚动(防止页面抖动)
// 禁止页面滑动 function unScroll() {const width $(body).width();$(body).css(width, width px);$(body).css(overflow-y, hidden); }// 移除禁止页面滑动 function reUnScroll() {$(body).css(overflow-y, auto);$(body).css(width, ); }使用场景:鼠标局部滑…...
Android Coli 3 ImageView load two suit Bitmap thumb and formal,Kotlin(七)
Android Coli 3 ImageView load two suit Bitmap thumb and formal,Kotlin(七) 在 Android Coli 3 ImageView load two suit Bitmap thumb and formal,Kotlin(六)-CSDN博客 的基础上改进,主要是…...
Halcon与C#:工业级机器视觉开发
Halcon(由MVTec开发)是一款广泛应用于工业机器视觉的高性能软件库,支持C#、C、Python等多种语言。以下是基于C#的Halcon开发详解,涵盖环境配置、核心流程、关键API及最佳实践。 1. 开发环境配置 1.1 安装Halcon …...
Unity序列化字段、单例模式(Singleton Pattern)
一、序列化字段 在Unity中,序列化字段是一个非常重要的概念,主要用于在Unity编辑器中显示和编辑类的成员变量,或者在运行时将对象的状态保存到文件或网络中。 1.Unity序列化字段的作用 在编辑器中显示和编辑字段:默认情况下&…...

【工具】Windows|外接的显示器怎么用软件调亮度(Brightness Slider)
文章目录 工具安装及使用Twinkle Tray:Brightness Slider补充背景知识1. DDC/CI(Display Data Channel Command Interface)2. WMI(Windows Management Instrumentation)3. Twinkle Tray如何结合两者?对比总…...