Rust中peekable的使用

alt

在 Rust 中,从迭代器中获取(也就是“消费”)一个元素时,每次调用 next 方法都会“消费”迭代器的一个元素,这意味着此元素被从迭代器中移除并返回给调用者, 一旦一个元素被消费,它就不能再次从同一个迭代器中获取。如下:

fn main() {
    let numbers = vec![1354967];
    let mut iter = numbers.iter(); // 创建一个迭代器

    // 消费第一个元素
    if let Some(first) = iter.next() {
        println!("The first number is {}", first);
    }

    // 继续消费剩余的元素
    for number in iter {
        println!("Next number: {}", number);
    }
}

输出:

The first number is 1
Next number: 3
Next number: 5
Next number: 4
Next number: 9
Next number: 6
Next number: 7

iter.next() 首先被调用来消费第一个元素。一旦这个元素被消费,它就不再是迭代器的一部分了。随后的 for 循环继续迭代剩余的元素,每次迭代循环都会消费一个元素,直到所有元素被消费完毕。


假如有这样一个Vec ,有这样一个需求:如果下一个元素是偶数,则打印出当前元素。


这时就要用到迭代器的 peekable方法, 其允许查看迭代器中的下一个元素,而不会消费它。

这样,就可以根据下一个元素的值来决定是否打印当前元素。

peek本身是偷看,窥视的意思

fn main() {
    let numbers = vec![1354967];
    let mut iter = numbers.iter().peekable();

    while let Some(&current) = iter.next() {
        if let Some(&&next) = iter.peek() {
            if next % 2 == 0 {
                println!("{}", current);
            }
        }
    }
}

输出为:

5
9

如上 创建了一个 Vec<i32> 的迭代器,并使用 peekable 方法使其成为 Peekable 迭代器。

使用 while let 循环遍历迭代器。在每次循环中,使用 iter.next() 获取当前元素。

使用 iter.peek() 查看下一个元素,但不从迭代器中移除它。

如果下一个元素是偶数(next % 2 == 0),打印出当前元素。

如此,这段代码遍历了整个 Vec<i32>,只有在下一个元素是偶数时,才会打印当前元素。

本文由 mdnice 多平台发布

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

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

相关文章

【三维生成与重建】ZeroRF:Zero Pretraining的快速稀疏视图360°重建

系列文章目录 题目&#xff1a;ZeroRF: Fast Sparse View 360◦ Reconstruction with Zero Pretraining 任务&#xff1a;稀疏重建&#xff1b;拓展&#xff1a;Image to 3D、文本到3D 作者&#xff1a;Ruoxi Shi* Xinyue Wei* Cheng Wang Hao Su &#xff0c;来自UC San Dieg…

解决GD32VF103编译printf无法打印 float

解决GD32VF103编译printf无法打印 float 在GD32VF103编译后&#xff0c;采用printf打印float变量时&#xff0c;总是无法显示&#xff0c;是因为编译时采用用newlib-nano库&#xff0c;但是这个库对printf做了优化&#xff0c;在eclipse的build配置use-newlib-nano的选项取消勾…

Autojs 实践-抖音极速版福袋助手

前言 好久没更新博客了&#xff0c;最近做了个抖音极速版福袋脚本&#xff0c;想看看能不能自动抢到&#xff0c;于是在仿照其他脚本UI做了一个&#xff0c;哈哈。利用上班时间让它自己跑&#xff0c;测试大概2-3天&#xff0c;一个福袋没抢到(也不知道是不是被检测到了)&…

解决Visual Studio 各版本都出现新建项目后解决方案下没有文件和项目问题

一步一步创建C#控制台应用程序也会出错&#xff0c;这个你可能不会相信&#xff0c;我就遇到了这么一次&#xff0c;就在刚刚&#xff0c;是的&#xff0c;我都不敢相信&#xff0c;用了这么多年的新建一个控制台程序居然不正常了。新建完毕发现里面什么都没有&#xff0c;除了…

C# .Net学习笔记—— 加密和解密算法

一、四种加密方式 1、MD5不可逆加密 2、Des对称可逆加密 3、RSA非对称可逆加密 4、数字证书SSL 二、详解 1、MD5加密 public class MD5Encrypt{public static string Encrypt(string source, int length 32){if (string.IsNullOrEmpty(source)) return string.Empty;HashA…

初级数据结构(七)——二叉树

文中代码源文件已上传&#xff1a;数据结构源码 <-上一篇 初级数据结构&#xff08;六&#xff09;——堆 | NULL 下一篇-> 1、写在前面 二叉树的基本概念在《初级数据结构&#xff08;五&#xff09;——树和二叉树的概念》中已经介绍得足够详细了。上一…

STM32CubeMX配置HAL库输入捕获

STM32CubeMX配置HAL库输入捕获 STM32的输入捕获功能可以用来测量脉冲宽度或者频率。其工作原理是&#xff0c;通过检测TIMx_CHx上的边沿信号&#xff0c;在边沿信号发生跳变&#xff08;比如 上升沿/下降沿&#xff09;的时候&#xff0c;将当前定时器的值&#xff08;TIMx_C…

Vue开发实践:解决Chrome浏览器禁止通过代码关闭窗口的问题

前言 在开发 Electron 桌面端应用时&#xff0c;软件有一个退出软件的按钮&#xff0c;用于关闭应用程序。然而&#xff0c;在实现这一功能的过程中&#xff0c;我们可能会遇到一些问题。本文将探讨这个问题&#xff0c;并给出解决方案。 实现 询问负责 Electron 的同学…

智能变电站协议系列-1、GOOSE、SV、MMS协议简介及GOOSE示例运行问题(IEC61850)

文章目录 一、前言二、资料准备三、智能变电站自动化系统架构四、GOOSE、MMS、SV协议以及其他协议1、GOOSE&#xff08;通用面向对象变电站事件&#xff09;协议2、MMS&#xff08;制造消息规范&#xff09;协议3、采样值 (SV) 协议4、数字化变电站中使用的其他协议遗留协议 五…

智能算力进阶C位,揭秘人工智能产业背后的“冰山一角”

作者 | 曾响铃 文 | 响铃说 前几年&#xff0c;在IDC领域&#xff0c;市场谈及最多的还是数据中心&#xff0c;随着人工智能产业的成熟&#xff0c;特别是今年以来大模型的爆发&#xff0c;智算中心逐步替代了数据中心进入大众视野&#xff0c;成为市场热议的关键词&#xff…

java-多线程

程序&#xff0c;进程&#xff0c;线程 【1】程序&#xff0c;进程&#xff0c;线程 ➢程序(program)&#xff1a;是为完成特定任务、用某种语言编写的一组指令的集合,是一段静态的代码。 &#xff08;程序是静态的&#xff09; ➢进程(process)&#xff1a;是程序的一次执行…

VGGNet

目录 一、VGGNet介绍 1、VGG块 2、VGG架构 3、LeNet, AlexNet和VGGNet对比 4、总结 二、代码实现 1、定义VGG卷积块 2、VGG网络 3、训练模型 4、总结 一、VGGNet介绍 VGGNet&#xff08;Visual Geometry Group Network&#xff09;是一种深度卷积神经网络&#xff0c;…