【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/8/10 9:33:33 阅读更多 →
智慧工地安全帽检测系统:YOLOv5与边缘计算实践

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

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

2026/8/11 10:22:45 阅读更多 →
每日关注简报|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/8/9 5:47:38 阅读更多 →

最新新闻

Agent-study项目教程(03):手写 Mini-ReAct Agent(不依赖框架)

Agent-study项目教程(03):手写 Mini-ReAct Agent(不依赖框架)

一、理论部分 1. Agent 的核心闭环:思考 → 选工具 → 执行 → 反馈 → 再思考 与“聊天机器人”不同,Agent 的关键能力在于:遇到需要外部信息或计算时,不是直接凭空回答,而是能够主动调用工具(Tool&#x…

2026/8/14 12:12:58 阅读更多 →
3步搞定Intel驱动更新后DXVK游戏启动失败:DirectX版本报错的排查与解决方案

3步搞定Intel驱动更新后DXVK游戏启动失败:DirectX版本报错的排查与解决方案

3步搞定Intel驱动更新后DXVK游戏启动失败:DirectX版本报错的排查与解决方案 【免费下载链接】dxvk Vulkan-based implementation of D3D8, 9, 10 and 11 for Linux / Wine 项目地址: https://gitcode.com/gh_mirrors/dx/dxvk 长尾关键词覆盖:Inte…

2026/8/14 12:12:58 阅读更多 →
深入解析网站建设五项基本原则如何打造高转化率的优质站点

深入解析网站建设五项基本原则如何打造高转化率的优质站点

在这个互联网流量红利逐渐见顶,精细化运营成为主流的今天,许多企业主或者独立开发者在提到“做网站”这件事时,往往还是停留在很浅显的层面。很多人觉得,花几千块钱找个模板,或者用国外的搭建工具拖拽几下,出一个能看的页面,就是完成了一次网站建设。这种观点在过去二十…

2026/8/14 12:12:58 阅读更多 →
esprint高级技巧:自定义工作线程数与性能优化实战指南

esprint高级技巧:自定义工作线程数与性能优化实战指南

esprint高级技巧:自定义工作线程数与性能优化实战指南 【免费下载链接】esprint Fast eslint runner 项目地址: https://gitcode.com/gh_mirrors/es/esprint esprint作为一款Fast eslint runner工具,能够显著提升代码检查效率。本文将深入探讨如何…

2026/8/14 12:12:58 阅读更多 →
网站建设 碧诺网络 深入解析:为何企业官网不仅是展示窗口更是业绩增长引擎

网站建设 碧诺网络 深入解析:为何企业官网不仅是展示窗口更是业绩增长引擎

在这个数字化转型浪潮汹涌澎湃的时代,很多企业主朋友常常陷入一种误区,认为拥有一个网站就像是在数字世界里买个地段,插上一面旗子,万事大吉。只要有人搜得到,客户就会源源不断地上门。这种想法听起来很美好,但现实往往是一记响亮的耳光。当你满怀期待地投入资金和精力,…

2026/8/14 12:12:57 阅读更多 →
Agent-study项目教程(06):AI智能写作与反思助手(LangGraph)

Agent-study项目教程(06):AI智能写作与反思助手(LangGraph)

一、理论部分 1. 为什么写作任务更适合用“图(Graph)”而不是“线性链(Chain)” 传统的链式调用通常是单向的:Prompt → LLM → Output。它适合一次性生成类任务,但不擅长表达真实写作过程中的“循环改稿”…

2026/8/14 12:11:56 阅读更多 →

日新闻

临沂网站建设铭镇:深耕本土数字生态,以匠心铸就企业品牌核心竞争力

临沂网站建设铭镇:深耕本土数字生态,以匠心铸就企业品牌核心竞争力

在这个流量为王、视觉至上的互联网时代,对于临沂乃至整个山东乃至全国的传统中小企业来说,拥有一张精美的“数字名片”早已不再是可选项,而是生存的必答题。每当夜幕降临,沂河两岸灯火辉煌,物流之都的喧嚣逐渐沉淀为对未来的思考。我们常常听到老板们在茶余饭后探讨:为什…

2026/8/14 0:00:26 阅读更多 →
Flutter与OpenHarmony实现剧本杀组队表单开发实战

Flutter与OpenHarmony实现剧本杀组队表单开发实战

1. 项目概述在移动应用开发领域,跨平台框架Flutter因其高效的开发体验和出色的性能表现,已经成为众多开发者的首选。而OpenHarmony作为新兴的操作系统平台,其开放性和灵活性为开发者提供了全新的可能性。本文将聚焦于一个实际应用场景——剧本…

2026/8/14 0:00:26 阅读更多 →
大连网站建设找简维科技:为您打造懂业务更懂用户的数字化转型引擎

大连网站建设找简维科技:为您打造懂业务更懂用户的数字化转型引擎

在这个数字化浪潮席卷全球的今天,企业想要在激烈的市场竞争中站稳脚跟,拥有一张好看的“数字名片”已经远远不够了。很多老板在刚开始接触互联网业务时,都有一个共同的困惑:为什么我花了钱建的网站,就像是在真空中自嗨?访客进来转了两圈就跑了,线索石沉大海,甚至连客服…

2026/8/14 0:01:27 阅读更多 →

周新闻

5分钟告别提取码焦虑:baidupankey如何智能破解百度网盘资源锁

5分钟告别提取码焦虑:baidupankey如何智能破解百度网盘资源锁

5分钟告别提取码焦虑:baidupankey如何智能破解百度网盘资源锁 【免费下载链接】baidupankey 在线查询网盘提取码(维护中 rm repo) 项目地址: https://gitcode.com/gh_mirrors/ba/baidupankey 你是否曾经在深夜寻找一份重要资料&#x…

2026/8/13 2:38:34 阅读更多 →
如何快速生成中国车牌图片:Python开源工具完整指南

如何快速生成中国车牌图片:Python开源工具完整指南

如何快速生成中国车牌图片:Python开源工具完整指南 【免费下载链接】chinese_license_plate_generator 中国车牌生成器 项目地址: https://gitcode.com/gh_mirrors/ch/chinese_license_plate_generator 中国车牌生成器是一个基于Python的开源项目&#xff0c…

2026/8/13 10:41:52 阅读更多 →
收藏!小白程序员轻松入门大模型,从Harness工程开始实践

收藏!小白程序员轻松入门大模型,从Harness工程开始实践

文章强调学习大模型不应只关注模型本身,而应重视模型外的系统搭建,即Harness。提出AgentModelHarness的实用公式,详细介绍Harness的四个层次:持久化层、执行层、控制层和观察与验证层。文章还探讨了上下文工程、工具设计、AGENTS.…

2026/8/13 10:41:51 阅读更多 →

月新闻

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘macOS版的龟速下…

2026/8/13 10:41:50 阅读更多 →
终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM格式文件无法在其他播放器播放而烦恼吗?ncmdump解密工具帮你轻松解决这个困…

2026/8/13 10:41:49 阅读更多 →
HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

AgentCard 智能体卡片:为英语学习 App 打造桌面级学习助手适用平台:HarmonyOS 7.0 (API 26 Beta)一、引言 HarmonyOS 7.0(API 26 Beta)新增了 AgentCard 智能体卡片能力,这是继 HMAF(鸿蒙智能体框架&#x…

2026/8/13 10:41:49 阅读更多 →