【Rust自学】13.5. 迭代器 Pt.1:迭代器的定义、iterator trait和next方法
13.5 迭代器 Pt.1迭代器的定义、iterator trait和next方法13.5.0. 写在正文之前Rust语言在设计过程中受到了很多语言的启发而函数式编程对Rust产生了非常显著的影响。函数式编程通常包括通过将函数作为值传递给参数、从其他函数返回它们、将它们分配给变量以供以后执行等等。在本章中我们会讨论 Rust 的一些特性这些特性与许多语言中通常称为函数式的特性相似- 闭包-迭代器本文- 使用闭包和迭代器改进I/O项目- 闭包和迭代器的性能13.5.1. 什么是迭代器提到迭代器就得先讲迭代器模式。迭代器模式允许你依次对一系列项里的每一个元素执行某些任务。而在这个过程中迭代器负责- 遍历每个项- 确定序列的遍历何时完成Rust的迭代器是懒惰的(lazy)除非调用消费迭代器的方法否则迭代器本身没有任何效果。这句话的意思大致是如果你在代码里写了迭代器但没有用到那么迭代器就相当于什么都没干。看个例子fn main() { let v1 vec![1, 2, 3]; let v1_iter v1.iter(); }v1是一个Vectorv1.iter()就是在给v1产生了一个迭代器赋给了v1_iter但是目前v1_iter没有被使用所以迭代器可以被看作没有任何效果。那我们使用迭代器来遍历fn main() { let v1 vec![1, 2, 3]; let v1_iter v1.iter(); for val in v1_iter { println!(Got: {}, val); } }这就相当于迭代器里的每个元素都被用在了一次循环里。13.5.2. Iterator trait所有的迭代器都实现了Iteratortrait。这个trait定义在标准库之下定义大致如下pub trait Iterator { type Item; fn next(mut self) - OptionSelf::Item; // methods with default implementations elided }这里面涉及两个新语法type Item和Self::Item这两个语法定义了与这个trait关联的类型这部分放在以后的文章讲。现在你需要知道的就是实现Iteratortrait需要你定义一个Item类型它用于next方法的返回类型迭代器的返回类型。Iterator这个trait仅要求实现一个方法——next。next方法每次调用都会返回迭代器中的一项也就是序列中的一个元素而由于返回类型是Option所以返回的结果会被包裹在Some变体里。如果迭代结束就会返回None。实际使用时可以直接在迭代器上调用next方法看个例子#[cfg(test)] mod tests { #[test] fn iterator_demonstration() { let v1 vec![1, 2, 3]; let mut v1_iter v1.iter(); assert_eq!(v1_iter.next(), Some(1)); assert_eq!(v1_iter.next(), Some(2)); assert_eq!(v1_iter.next(), Some(3)); assert_eq!(v1_iter.next(), None); } }v1是一个Vectorv1_iter是v1的迭代器由于下面的操作会被视为修改迭代器的状态所以得加mut关键字声明为可变。assert_eq!(v1_iter.next(), Some(1));这句话是第一次调用next就会返回Vector里第一个元素用Some包裹也就是Some(1)这里是1是因为迭代器的返回值是被Option类型包裹的不可变引用。assert_eq!(v1_iter.next(), Some(2));是第二次调用next就会返回Vector里第二个元素用Some包裹也就是Some(2)以此类推......在迭代器上调用next方法会更改迭代器用于跟踪其在序列中位置的内部状态。换句话说每一次调用就是消耗了这个迭代器里一个元素。而13.5.1中例子的for循环不需要mut是因为for循环实际上取得了v1_iter的所有权。13.5.3. 几种迭代方法刚才使用的iter方法生成的是一个不可变引用的迭代器通过next方法所取得的值实际上是指向Vector中的元素的不可变引用。into_iter方法创建的迭代器会获得所有权。也就是它在迭代元素时会把元素移动到新的作用域内并取得所有权。iter_mut方法在遍历值时使用的是可变的引用。

相关新闻

【Rust自学】12.5. 重构 Pt.3:移动业务逻辑

【Rust自学】12.5. 重构 Pt.3:移动业务逻辑

12.5 重构 Pt.3:移动业务逻辑 12.5.0. 写在正文之前 第12章要做一个实例的项目——一个命令行程序。这个程序是一个grep(Global Regular Expression Print),是一个全局正则搜索和输出的工具。它的功能是在指定的文件中搜索出指定的文字。 这个项目分为…

2026/7/23 18:56:44 阅读更多 →
智慧工地安全帽检测系统:YOLOv5与边缘计算实践

智慧工地安全帽检测系统:YOLOv5与边缘计算实践

1. 项目背景与核心价值在建筑施工现场,安全帽是保护工人头部安全的最后一道防线。根据行业统计数据显示,超过60%的头部伤害事故都与未正确佩戴安全帽有关。传统的人工巡检方式存在监管盲区大、响应滞后等问题,而"智慧工地安全帽佩戴检测…

2026/7/23 18:56:44 阅读更多 →
每日关注简报|2026年7月23日:Copilot成效仪表盘、Codex iOS升级、Windows 11新功能与AI财报

每日关注简报|2026年7月23日:Copilot成效仪表盘、Codex iOS升级、Windows 11新功能与AI财报

🔥 个人主页: 杨利杰YJlio ❄️ 个人专栏: 《Windows 疑难杂症与工单复盘案例库》 《Sysinternals实战教程》 《WINDOWS教程》 《Windows PowerShell 实战》 《IOS插件分析测试》 《超简单:用Python让Excel飞起来》…

2026/7/23 18:56:44 阅读更多 →

最新新闻

c#面试知识汇总

c#面试知识汇总

show和showDialog的区别?show属于非模态,showDialog属于模态,showDialog需等当前窗口关闭后才能进行其他交互,show相反不需要关闭当前窗口即可交互。另外show是异步,showDialog是同步2.什么是大小端?大小端…

2026/7/23 19:11:49 阅读更多 →
Tiva™ TM4C129XNCZAD低功耗设计:睡眠模式时钟门控实战指南

Tiva™ TM4C129XNCZAD低功耗设计:睡眠模式时钟门控实战指南

1. 项目概述与核心价值在嵌入式开发领域,尤其是面向电池供电的物联网节点、便携式医疗设备或远程传感器,功耗管理从来都不是一个“锦上添花”的选项,而是决定产品成败的关键。我经历过不少项目,前期功能跑得飞起,一到功…

2026/7/23 19:11:49 阅读更多 →
3399元、420mm大尺寸,更适合TPU打印!创想三维发布Ender-3 V3 Mega 3D打印机

3399元、420mm大尺寸,更适合TPU打印!创想三维发布Ender-3 V3 Mega 3D打印机

桌面级3D打印机正在越做越快,也越做越大。如今,250250250mm已经成为不少消费级3D打印机的标配,但并不是所有用户都够用。尤其对工作室、打印农场和专业用户来说,真正决定生产效率的,除了打印速度,往往还有更…

2026/7/23 19:11:49 阅读更多 →
浮点数存储及误差

浮点数存储及误差

前提知识:十进制小数表示:,二进制小数表示:,,,以此类推。。。浮点数float在计算机的存储:IEEE 754 单精度浮点数(32 位)的结构 符号位(1 位&#…

2026/7/23 19:11:49 阅读更多 →
DeepSeek大模型本地部署与优化实战指南

DeepSeek大模型本地部署与优化实战指南

1. 本地部署DeepSeek全流程解析最近在技术社区看到不少同行讨论DeepSeek这个大模型的应用效果,作为长期关注AI落地的开发者,我花了三天时间完整走通了本地部署的全流程。相比云端API调用,本地部署不仅能避免网络延迟,更重要的是可…

2026/7/23 19:11:49 阅读更多 →
AI日报编制3.0:多模态数据整合与智能分析实践

AI日报编制3.0:多模态数据整合与智能分析实践

1. 项目概述"AI日报 - 2026年04月08日"这个标题看似简单,实际上蕴含着一个专业科技媒体或研究机构的核心工作流程。作为长期跟踪AI领域发展的从业者,我深知这类日报的编制远不止是信息汇总那么简单。它需要建立在对行业动态的持续监测、技术趋…

2026/7/23 19:10:49 阅读更多 →

日新闻

从单点好评到指数级传播:AI副业主理人必须掌握的4层口碑渗透模型(含ROI测算表)

从单点好评到指数级传播:AI副业主理人必须掌握的4层口碑渗透模型(含ROI测算表)

更多请点击: https://intelliparadigm.com 第一章:从单点好评到指数级传播:AI副业主理人必须掌握的4层口碑渗透模型(含ROI测算表) 当AI副业主理人不再仅满足于单次服务交付,而是主动构建可复用、可裂变、可…

2026/7/23 0:00:25 阅读更多 →
AI写作开头钩子设计:为什么你的AI文案完读率不足18%?——基于2,346篇A/B测试报告的归因分析

AI写作开头钩子设计:为什么你的AI文案完读率不足18%?——基于2,346篇A/B测试报告的归因分析

更多请点击: https://codechina.net 第一章:AI写作开头钩子设计:为什么你的AI文案完读率不足18%?——基于2,346篇A/B测试报告的归因分析 在对2,346篇跨行业AI生成文案的A/B测试数据进行聚类分析后,我们发现&#xff1…

2026/7/23 0:01:26 阅读更多 →
Chitchatter完整指南:免费开源的终极点对点安全聊天工具

Chitchatter完整指南:免费开源的终极点对点安全聊天工具

Chitchatter完整指南:免费开源的终极点对点安全聊天工具 【免费下载链接】chitchatter Secure peer-to-peer chat that is serverless, decentralized, and ephemeral 项目地址: https://gitcode.com/gh_mirrors/ch/chitchatter Chitchatter是一款革命性的安…

2026/7/23 0:01:26 阅读更多 →

周新闻

Go语言静态资源打包方案对比与实践指南

Go语言静态资源打包方案对比与实践指南

1. 项目背景与核心需求在Go语言开发中,我们经常需要处理静态资源文件的打包问题。无论是Web应用的模板文件、前端资源,还是配置文件、证书等,都需要随程序一起分发。传统做法是将这些文件与编译后的二进制文件放在同一目录下,但这…

2026/7/22 8:58:19 阅读更多 →
Go语言实现高性能LDAP认证服务的架构与实践

Go语言实现高性能LDAP认证服务的架构与实践

1. 项目背景与核心价值LDAP(轻量级目录访问协议)作为企业级身份认证的黄金标准,已经服务了超过80%的财富500强公司。我在金融科技领域实施统一认证体系时,发现传统Java方案存在启动慢、内存占用高等痛点。而Go语言凭借其协程并发模…

2026/7/22 19:43:43 阅读更多 →
【AI面试官实战指南】:用ChatGPT模拟10类高频技术岗面试,3天提升应答精准度92%

【AI面试官实战指南】:用ChatGPT模拟10类高频技术岗面试,3天提升应答精准度92%

更多请点击: https://intelliparadigm.com 第一章:AI面试官实战指南的核心价值与适用场景 AI面试官并非替代人类HR的“黑箱工具”,而是以可解释、可审计、可迭代的方式,赋能招聘全链路的关键基础设施。其核心价值在于将主观经验沉…

2026/7/23 17:49:47 阅读更多 →

月新闻